(个人回忆+西工大计算机微信公众号)
1.一组整数,由小到大排序,有n组测试数据,排序输出
输入样例:
2
1 5 8 6 3 2 0
4 2 3 8 15 63 20 1
Output:
0 1 2 3 5 6 8
1 2 3 4 8 15 20 63
参考代码:
#include<stdio.h>
void quicksort(int data[],int begin,int end)
{
//变量定义及初始化
int i = begin,j = end;
int key,temp;
key = data[begin];
//递归跳出条件
if(begin >= end)
return;
//快速排序算法
while(i < j)
{
while(i < j && key <= data[j])
j--;
if(key >= data[j])
{
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
while(i < j && key >= data[i])
i++;
if(key <= data[i])
{
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
//快速排序的二分法
quicksort(data,begin,i-1);
quicksort(data,j+1,end);
}
int main()
{
int n,data[100],i,length;
scanf("%d",&n);
char ch;
while(n--)
{
length = 0;
do
{
scanf("%d",&data[length]);
length++;
}while((ch=getchar())!= '\n');
quicksort(data,0,length-1);
for(i = 0;i < length;i++)
printf("%d ",data[i]);
printf("\n");
}
}
2.利用海伦公式求三角形的面积,是三角形输出面积(保留两位小数)否则输出NaN;(会给海伦公式)
Input:
2
3.0 4.0 5.0
1.0 2.0 3.0
Output:
6.00
NaN
参考代码:
#include<stdio.h>
#include<math.h>
int main(){
int n;
scanf("%d",&n);
while(n--){
double a,b,c,p,area;
scanf("%lf%lf%lf",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a){
p=(a+b+c)/2;
area=sqrt(p*(p-a)*(p-b)*(p-c));
printf("%0.2lf\n",area);
}
else
printf("NaN\n");
}
return 0;
}
3.判断ip地址是否合法,以字符串的形式输入,格式为a.b.c.d,每个均为整数,若每个数均在[0,255]之间,则说明是合法的,输出yes,否则输出no
输入样例:
2
255.2.26.2
1.2.333.4
Output:
yes
no
参考代码:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n--){
int a,b,c,d;
scanf("%d.%d.%d.%d",&a,&b,&c,&d);
if(a>=0&&a<256&&b>=0&&b<256&&c>=0&&c<256&&d>=0&&d<256)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
4.从m开始找出n个质数(如果m是,输出m)
输入样例:
4 3
Output:
5
7
11
参考代码:
#include<stdio.h>
bool prime(int n){
int i;
if((n>2 && !(n&1) )|| n<2) return false;
for(i=3; i*i<=n;i+=2)
if(!(n%i)) return false;
return true;
}
int main(void){
int m,n,i;
scanf("%d%d",&m,&n);
for(m++,i=0;i<n;m++)
if(prime(m)){
printf("%d\n",m);
i++;
}
return 0;
}
5.求任意两天的日期差(当时没写出来任意两天的,暴力写出一年中的任意两天)
输入样例:
2
2016 1 1 2016 3 1
2019 1 1 2019 1 2
OutPut:
61
2
参考代码:
#include<stdio.h>
int date(int n1,int y1,int r1,int n2,int y2,int r2);
int run_or_ping(int x);
inline int yue_r(int n,int y);
int main()
{
int n1,y1,r1,n2,y2,r2;
printf("请输入第一个较小的年月日,用空格分开\n");
scanf("%04d%02d%02d",&n1,&y1,&r1);
printf("请输入第二个较大的年月日,用空格分开\n");
scanf("%04d%02d%02d",&n2,&y2,&r2);
date(n1,y1,r1,n2,y2,r2);
return 0;
}
int date(int n1,int y1,int r1,int n2,int y2,int r2)
{
int i,j,sum=0,sum1=0;
for(i=n1;i!=n2;i++)
{
if(run_or_ping(i)==1)
sum=sum+366;
else sum=sum+365;
}
if(y1<y2)
for(j=y1;j!=y2;j++)
{
sum=sum+yue_r(n2,j);
}
else
{
for(j=y2;j!=y1;j++)
sum1=sum1+yue_r(n2,j);
sum=sum-sum1;
}
sum=sum+r2-r1+1;
printf("%04d.%02d.%02d~%04d.%02d.%02d相差%d天",n1,y1,r1,n2,y2,r2,sum);
return 0;
}
int run_or_ping(int x)
{
if(x%4==0)
{
if(x%100==0)
if(x%400!=0)
return 0;
return 1;
}
else return 0;
}
int yue_r(int n,int y)
{
if(y==2)
{
if(run_or_ping(n)==1)
return 29;
else return 28;
}
else if(y==4||y==6||y==9||y==11)
return 30;
else return 31;
}
扫描二维码关注公众号,回复:
12194932 查看本文章