2019西工大计算机机试参考代码

(个人回忆+西工大计算机微信公众号)

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 查看本文章

猜你喜欢

转载自blog.csdn.net/lixiaohulife/article/details/88797019