@Metralix
2016-10-06T18:42:51.000000Z
字数 2574
阅读 919
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");
else
printf("NO");
}
else
printf("NO");
return 0;
}
学完字符串的知识以后这题就不难了,将数字作为char型字符,gets实现回车输入字符串,然后用一个for循环检索字符串里'4'和'7'的数量,用k和h记录,最后比较一下得出结果。
#include<stdio.h>
#define N 51
int 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);
else
printf("%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);
}
}
}