一、握手问题
思路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;
}
结果: