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

1.

给你n个数,请输出其中奇数的个数。

输入

         有多组样例,第一行是一个整数N(1<=N<=100),表示有多少个数,如果N为0则表示输入结束。第二行是N个整数,每个整数之间用一个空格隔开。

输出

         每行输出一个样例的结果,即奇数的数目。

这个题主要是数组结合判断,就是那个s=0;放在while()里面

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

2.

给你两个闭区间,请判断这两个区间是否相交。

输入

         有多组样例,第一行是一个整数N(1<=N<=100),表示有多少个样例。每个样例占两行,每行是两个整数,X,Y(0<=X<=Y<=1000),表示闭区间[X,Y]。

输出

         每行输出一个样例的结果,如果相交,那么输出“Yes”,否则输出“No”。


写这个题目的时候,出现了Output Limit Exceed,在这里说了下意思,就是提示你的程序产生了过多的输出信息,一般是由于死循环造成的。
比如这个题,我用了while(n--)之后,还使用了for(i=0;i<n;i++),所以出现了过多的输出信息
还有就是这个题的判断过程,将两个端点分别和另一个区间去比较

#include<stdio.h>
int main()
{
    int i,n;
    int x1,y1,x2,y2;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
       scanf("%d%d",&x1,&y1);
       scanf("%d%d",&x2,&y2);
       if((x2>=x1&&x2<=y1)||(y2>=x1&&y2<=y1)||(x1>=x2&&x1<=y2)||(y1>=x2&&y1<=y2))
       printf("Yes\n");
       else
       printf("No\n");
    }
}


3.
数码平方和

一个整数各个数码的平方和的个位数称为它的分类值。给你一个区间[a,b],和一个数码n,请求这个区间内多少数的分类值为n。

输入

         第一行是一个整数K,表示样例的个数。每个样例占一行,为三个整数a,b,n(1<=a<=b<=100,000,0<=n<=9)。

输出

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


这个题真的难,主要是,首先用个数组来存储1~100000所有数的数码归类,然后在输入输出的时候对从a~b的数给定的数码归类和数组的进行比较
真的脑洞大开,还有就是在判断数码归类的时候
con += (x%10)*(x%10);
        con %= 10;
        x/=10;
这一段真的很好

#include<stdio.h>
int main()
{
  int i,out[100001];
  int m,a,b,n;
  for(i=1;i<=100000;i++)
  {
    int con=0;
    int x = i;
    while(x)
    {
        con += (x%10)*(x%10);
        con %= 10;
        x/=10;
    }
       out[i]=con;
  }
   scanf("%d",&m);
   while(m--)
   {
       int s=0;
       scanf("%d%d%d",&a,&b,&n);
       for(i=a;i<=b;i++)
       {
       if(out[i]==n)
       s++;
       }
       printf("%d\n",s);
   }
}

4.
偶数的和

给你n个数,请输出其中偶数的累加和。

输入

         有多组样例,第一行是一个整数N(1<=N<=100),表示有多少个数,如果N为0则表示输入结束。第二行是N个整数,每个整数之间用一个空格隔开。

输出

         每行输出一个样例的结果,即偶数的累加和。(输入保证结果可以用32bitint表示)。


这个题比较简单,用个数组然后判断是否偶数再相加就好

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


5.
三点共线

给你平面上三个点的坐标,请判断三点是否共线。

输入

         有多组样例,第一行是一个整数N(1<=N<=100),表示有多少个样例。每个样例占三行,每行是两个整数,X,Y(-1000<=X,Y<=1000),表示一个点的坐标。

输出

         每行输出一个样例的结果,如果三点共线,那么输出“Yes”,否则输出“No”。


这个题想到三点共线就是斜率的问题,将其中两个点的斜率和另外两点的斜率比较,交差相乘是因为有斜率为零或者斜率不存在的情况
然后简单试了下就过了

#include<stdio.h>
int main()
{
  int n;
  int x1,y1,x2,y2,x3,y3;
  scanf("%d",&n);
  while(n--)
  {
   scanf("%d%d",&x1,&y1);
   scanf("%d%d",&x2,&y2);
   scanf("%d%d",&x3,&y3);
   if((y2-y1)*(x3-x2)==(y3-y2)*(x2-x1))
     printf("Yes\n");
   else
     printf("No\n");
  }
}



猜你喜欢

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