[关闭]
@Metralix 2016-10-06T10:42:51.000000Z 字数 2574 阅读 834

TEST 1

语言: C

problem A

0~1000的幸运数字有限,可以直接全部列出来,然后验证就行了

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n;
  5. scanf("%d",&n);
  6. if(n>=1&&n<=1000)
  7. {
  8. if(n%4==0||n%7==0||n%47==0||n%74==0||n%444==0||n%447==0||n%474==0||n%477==0||n%744==0||n%747==0||n%774==0||n%777==0||n%44==0||n%77==0)
  9. printf("YES");
  10. else
  11. printf("NO");
  12. }
  13. else
  14. printf("NO");
  15. return 0;
  16. }

B

学完字符串的知识以后这题就不难了,将数字作为char型字符,gets实现回车输入字符串,然后用一个for循环检索字符串里'4'和'7'的数量,用k和h记录,最后比较一下得出结果。

  1. #include<stdio.h>
  2. #define N 51
  3. int main()
  4. {
  5. char len[N];
  6. int i,k=0,h=0;
  7. gets(len);
  8. for (i=0;len[i]!='\0';i++)
  9. {
  10. if('4'==len[i])
  11. k++;
  12. else if('7'==len[i])
  13. h++;
  14. }
  15. if(k>h)
  16. printf("%d",4);
  17. else if(k<h)
  18. printf("%d",7);
  19. else if(k==h&&h==0)
  20. printf("%d",-1);
  21. else if(k==h&&h!=0)
  22. printf("%d",4);
  23. else
  24. printf("%d",-1);
  25. return 0;
  26. }

C

将b分类
如果b< n-a 只能在b的范围内站着,所以i=b+1;
如果b>= n-a的话,那么我站的位置和b没有关系,即i=n-a

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a,b,n,i;
  5. scanf("%d %d %d",&n,&a,&b);
  6. if(b>=n-a)
  7. i=n-a;
  8. else if(b<n-a)
  9. i=b+1;
  10. printf("%d",i);
  11. return 0;
  12. }

E

实际上这题就是计算坐标连线长度的问题,A1,A2....An都是一个个坐标点,所以你只要写一个两点之间的距离公式,先给A1一个初始位置,然后用个for循环不断将A1的坐标用完后舍弃,将A2赋给A1,就实现了计算总的长度。

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. int n,k,i;
  6. scanf("%d %d",&n,&k);
  7. int x1,y1,x2,y2;
  8. double w=0;
  9. scanf("%d %d",&x1,&y1);
  10. for(i=1;i<n;i++)
  11. {
  12. scanf("%d %d",&x2,&y2);
  13. w+=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
  14. x1=x2;
  15. y1=y2;
  16. }
  17. printf("%.9f",(w*k)/50);
  18. }

F

每两个相同长度的棍子能凑成一对,每两对能凑成一个框。
首先,找有多少对棍子,把所有长度输入一个数组,然后对这个数组排序;
从第一个数开始,如果下一个数和它相等,那么,记录h++,不等的话,跳到下一个长度,最终这个长度的对数应该是(h+1)/2............(这个公式是自己找规律的)
然后将h的值存入一个数组a[]={0},再把h清空,继续循环。
这个数组循环完了以后,所有长度的对数都在a[]中
然后用个for循环,将对数全部累加起来/2就是最终结果

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n,i,j,temp;
  5. scanf("%d",&n);
  6. int asd[n];
  7. for(i=0;i<n;i++)
  8. {
  9. scanf("%d",&asd[i]);
  10. }
  11. for(i=0;i<n-1;i++)
  12. {
  13. for(j=i+1;j<n;j++)
  14. {
  15. if(asd[j]>asd[i])
  16. {
  17. temp=asd[j];
  18. asd[j]=asd[i];
  19. asd[i]=temp;
  20. }
  21. }
  22. }
  23. int g=0,h=0,sum=0,k;
  24. int a[100]={0};
  25. for(g=0;g<n;g++)
  26. {
  27. if(asd[g+1]==asd[g])
  28. {
  29. h++;
  30. }
  31. else
  32. {
  33. h=(h+1)/2;
  34. a[g]=h;
  35. h=0;
  36. }
  37. }
  38. for(k=0;k<n;k++)
  39. {
  40. sum+=a[k];
  41. }
  42. printf("%d",sum/2);
  43. }

G

这题考虑一下奇偶性就可以了
如果总数是奇数个的糖的话,你只要拿走含奇数个糖的包
偶数也是如此。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n,i,sum,h=0,k=0;
  5. scanf("%d",&n);
  6. int asd[n-1];
  7. for(i=0;i<n;i++)
  8. {
  9. scanf("%d",&asd[i]);
  10. }
  11. for(i=0;i<n;i++)
  12. {
  13. sum+=asd[i];
  14. }
  15. if(sum%2==0)
  16. {
  17. for(i=0;i<n;i++)
  18. {
  19. if(asd[i]%2==0)
  20. h++;
  21. }
  22. }
  23. else if(sum%2!=0)
  24. {
  25. for(i=0;i<n;i++)
  26. {
  27. if(asd[i]%2!=0)
  28. k++;
  29. }
  30. }
  31. printf("%d",h+k);
  32. return 0;
  33. }

I

看清题设,只有从第二位开始全部是大写的字符串,所以我写了个函数,判断字符串是否满足这个条件
然后用for循环结合if选择结构输出结果

  1. #include<stdio.h>
  2. #include<string.h>
  3. int check(char let[])
  4. {
  5. int i;
  6. for (i=1;i<strlen(let);i++)
  7. {
  8. if(let[i]>='a'&&let[i]<='z')
  9. return(0);
  10. }
  11. return(1);
  12. }
  13. int main()
  14. {
  15. int i;
  16. char let[100];
  17. gets(let);
  18. if(0==check(let))
  19. {
  20. for(i=0;i<strlen(let);i++)
  21. printf("%c",let[i]);
  22. }
  23. else if(1==check(let))
  24. {
  25. for(i=0;i<strlen(let);i++)
  26. {
  27. if(let[i]>='a'&&let[i]<='z')
  28. printf("%c",let[i]-32);
  29. else if(let[i]>='A'&&let[i]<='Z')
  30. printf("%c",let[i]+32);
  31. }
  32. }
  33. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注