XTU C语言程序设计实践作业7

1.

不及格的人数

给你N(1<=N<=40)个人分数,每个分数x(0<=x <=100),60分及以上为及格,请统计一下不及格的人数。

样例的第一行是一个整数N,如果这个值为0则表示输入结束,这个样例不需要处理。第二行是N个整数,即N个分数。

每行输出一个样例的结果。

3
100 99 56
4
10 55 59 60
0

#include<stdio.h>
main()
{
    int i,n;
    int a[41];
    while(scanf("%d",&n))
    {   
        int count=0;
        if(n==0)
    return 0;
    for(i=0;i<n;i++)
    {
      scanf("%d",&a[i]);
          if(a[i]<60)
          count++;
    }
    printf("%d\n",count);
    }    

2.

哈密尔顿距离

两个点P(x1,y1),Q(x2,y2),定义其哈密尔顿距离D=|x1-x2|+|y1-y2|。请计算给定两点的哈密尔顿距离。

输入

第一行是一个整数N,表示样例的个数。

以后的N行,每行一个样例,为四个整数x1,y1,x2,y2, 0<=x1,y1,x2,y2<=1000。

输出

每行输出一个样例的结果。

这个题主要是求绝对值函数,安abs();是求整形函数绝对值的方法,fabs()是求浮点数绝对值函数的办法

还需要添加一个头文件#include<stdlib.h>

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
main()
{
 int n;
 int i,x1,y1,x2,y2;
 int D;
 scanf("%d",&n);
 for(i=0;i<n;i++)  
 {
  scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
     D=abs(x2-x1)+abs(y2-y1);
  printf("%d\n",D); 
 }
}

3.

a+b

Description

输入两个数码的英文,求其和值。

输入

第一行是一个整数N,表示样例的个数。以后每行两个字符串,是数码的单词,之间用一个空格隔开。

输出

每行输出一个样例的结果,一个10进制整数。

5
zero one
two three
four five
six seven
eight nine

1
5
9
13
17
这个题首先要写一个把英语数字转换为阿拉伯数字的函数,我取名为zifuchuan,这个函数的定义就是

 int zifuchuan(char a[]),int 是函数的返回类型,我们最后return 的是阿拉伯数字,而参数类型是char []

因为我们要输入的是一个字符串,用数组储存起来,然后函数中又调用了一个字符串比较函数strcmp(a,b)

当两个字符串相等的时候返回值为0,再者就是输入scanf("")的时候,会有一个回车键被接下来要出现的字符串输入吸收

所以我们用了一个getchar()来吸收产生的字符串,代码如下

#include<stdio.h>
#include<string.h>
int zifuchuan(char a[])
{
 int x;
 if(strcmp(a,"zero")==0)
    x=0;
    else if(strcmp(a,"one")==0)
    x=1;
    else if(strcmp(a,"two")==0)
       x=2;
    else if(strcmp(a,"three")==0)
       x=3;
    else if(strcmp(a,"four")==0)
       x=4;
    else if(strcmp(a,"five")==0)  
       x=5;
    else if(strcmp(a,"six")==0)
       x=6;
    else if(strcmp(a,"seven")==0)
       x=7;
    else if(strcmp(a,"eight")==0)
       x=8;
    else if(strcmp(a,"nine")==0)
       x=9;
    return x;
}
    main()
    {  
        int x,y;
     int i,n;
     char a[10],b[10];
     scanf("%d",&n);
     getchar();
     for(i=0;i<n;i++)
     {
      scanf("%s%s",&a,&b);
      x=zifuchuan(a);
      y=zifuchuan(b);
      printf("%d\n",x+y);
     }
    }

3.

哥德巴赫猜想

有多个样例。每行输入一个偶数n,(6<=n<=1,000,000,000),如果n为0,表示输入结束,这个样例不需要处理。

每行输出一个样例的结果,如果n存在多组素数和,那么就输出含最小素数的组合。每个样例输出两个整数,前者为较小的素数,后者为较大的素数,中间用一个空格隔开。

这个题主要就是素数的判断的算法问题

#include<stdio.h>
#include<math.h>
int sushu(int x)
{
	int i;
	if(x==2||x==3)
	return 1;
	for(i=2;i*i<=x;i++)
	{
		if(x%i==0)
	    return 0;
	}	
	return 1;		
}		 
    main()
    {
    	int i,n;
   	    int y;
		while(scanf("%d",&n))
		{   
		    if(n==0)
		    return 0;
			for(i=2;i<=n/2;i++)
			{
				if(sushu(i))
				{
					y = n-i;
					if(sushu(y))
					break;
				}
			}
			printf("%d %d\n",i,y);
		}
		 
    }
 

猜你喜欢

转载自blog.csdn.net/qq_40111789/article/details/79189823