@Metralix
2016-10-06T10:42:51.000000Z
字数 2574
阅读 1053
0~1000的幸运数字有限,可以直接全部列出来,然后验证就行了
#include<stdio.h>int main(){int n;scanf("%d",&n);if(n>=1&&n<=1000){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)printf("YES");elseprintf("NO");}elseprintf("NO");return 0;}
学完字符串的知识以后这题就不难了,将数字作为char型字符,gets实现回车输入字符串,然后用一个for循环检索字符串里'4'和'7'的数量,用k和h记录,最后比较一下得出结果。
#include<stdio.h>#define N 51int main(){char len[N];int i,k=0,h=0;gets(len);for (i=0;len[i]!='\0';i++){if('4'==len[i])k++;else if('7'==len[i])h++;}if(k>h)printf("%d",4);else if(k<h)printf("%d",7);else if(k==h&&h==0)printf("%d",-1);else if(k==h&&h!=0)printf("%d",4);elseprintf("%d",-1);return 0;}
将b分类
如果b< n-a 只能在b的范围内站着,所以i=b+1;
如果b>= n-a的话,那么我站的位置和b没有关系,即i=n-a
#include <stdio.h>int main(){int a,b,n,i;scanf("%d %d %d",&n,&a,&b);if(b>=n-a)i=n-a;else if(b<n-a)i=b+1;printf("%d",i);return 0;}
实际上这题就是计算坐标连线长度的问题,A1,A2....An都是一个个坐标点,所以你只要写一个两点之间的距离公式,先给A1一个初始位置,然后用个for循环不断将A1的坐标用完后舍弃,将A2赋给A1,就实现了计算总的长度。
#include<stdio.h>#include<math.h>int main(){int n,k,i;scanf("%d %d",&n,&k);int x1,y1,x2,y2;double w=0;scanf("%d %d",&x1,&y1);for(i=1;i<n;i++){scanf("%d %d",&x2,&y2);w+=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));x1=x2;y1=y2;}printf("%.9f",(w*k)/50);}
每两个相同长度的棍子能凑成一对,每两对能凑成一个框。
首先,找有多少对棍子,把所有长度输入一个数组,然后对这个数组排序;
从第一个数开始,如果下一个数和它相等,那么,记录h++,不等的话,跳到下一个长度,最终这个长度的对数应该是(h+1)/2............(这个公式是自己找规律的)
然后将h的值存入一个数组a[]={0},再把h清空,继续循环。
这个数组循环完了以后,所有长度的对数都在a[]中
然后用个for循环,将对数全部累加起来/2就是最终结果
#include<stdio.h>int main(){int n,i,j,temp;scanf("%d",&n);int asd[n];for(i=0;i<n;i++){scanf("%d",&asd[i]);}for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(asd[j]>asd[i]){temp=asd[j];asd[j]=asd[i];asd[i]=temp;}}}int g=0,h=0,sum=0,k;int a[100]={0};for(g=0;g<n;g++){if(asd[g+1]==asd[g]){h++;}else{h=(h+1)/2;a[g]=h;h=0;}}for(k=0;k<n;k++){sum+=a[k];}printf("%d",sum/2);}
这题考虑一下奇偶性就可以了
如果总数是奇数个的糖的话,你只要拿走含奇数个糖的包
偶数也是如此。
#include<stdio.h>int main(){int n,i,sum,h=0,k=0;scanf("%d",&n);int asd[n-1];for(i=0;i<n;i++){scanf("%d",&asd[i]);}for(i=0;i<n;i++){sum+=asd[i];}if(sum%2==0){for(i=0;i<n;i++){if(asd[i]%2==0)h++;}}else if(sum%2!=0){for(i=0;i<n;i++){if(asd[i]%2!=0)k++;}}printf("%d",h+k);return 0;}
看清题设,只有从第二位开始全部是大写的字符串,所以我写了个函数,判断字符串是否满足这个条件
然后用for循环结合if选择结构输出结果
#include<stdio.h>#include<string.h>int check(char let[]){int i;for (i=1;i<strlen(let);i++){if(let[i]>='a'&&let[i]<='z')return(0);}return(1);}int main(){int i;char let[100];gets(let);if(0==check(let)){for(i=0;i<strlen(let);i++)printf("%c",let[i]);}else if(1==check(let)){for(i=0;i<strlen(let);i++){if(let[i]>='a'&&let[i]<='z')printf("%c",let[i]-32);else if(let[i]>='A'&&let[i]<='Z')printf("%c",let[i]+32);}}}