一、握手问题
思路1:
1)先让所有人相互握手
第一个人49次
第二个人48次
·
·
·
第五十个人0次 共计0+1+2+···+49
2)减去7个没握手的 0+1+···+6
#include<stdio.h>
int main()
{
int a = 50*49/2 - 7*6/2;
printf("%d\n",a);
return 0;
}
运行结果:
思路2:
1)让这7个人和剩下43人都握一次手
7*43
2)43个人相互握手
#include<stdio.h>
int main()
{
int b = 7*43 + 43*42/2;
printf("%d\n",b);
return 0;
}
运行结果:
二、小球反弹
#include<stdio.h>
#include<math.h>
int main()
{
long long x = 343720;
long long y = 233333;
int t = 1;
while(1)
{
if((t*15)%x==0 && (t*17)%y==0)
{
break;
}
t++;
}
printf("%d\n",t);
double s ;
s = 2 * ((15*15*t*t)+(17*17*t*t));
printf("%.2lf\n",2 * sqrt((15.0*15*t*t)+(17.0*17*t*t)));
return 0;
}
三、好数
本题亮点:
用log10(n)算出当前数是几位数
#include <stdio.h>
#include<math.h>
int good_num(int n,int len)
{
int i;
int k = 0;
for(i = 1;i <= len;++i)
{
k = n % 10;//取个位数
if((i % 2 == 1 && k % 2 == 0)||(i % 2 == 0 && k % 2 == 1))
{
return -1;
}
n /= 10;
}
return 1;
}
int main(int argc, char *argv[])
{
int N;
scanf("%d",&N);
int i;
int count = 0;
int len;
int ret;
for(i = 1;i <= N;++i)
{
len = (int)log10(i)+1;//得到当前数是几位数
ret = good_num(i,len);
if(1 == ret)
{
count++;
}
}
printf("%d\n",count);
return 0;
}
结果: