韩信点兵c语言
相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人、17人一列余2人、19人一列余10人、23人一列余1人、29人一列余11人。但限时为500ms,我超时很多次都不行,即输入3 5 7 13 17 19 23 29它们分别被余数为1 2 4 6 2 10 1 11输出总兵士数,要求输出满足条件的最小的一个,但要满足8种排法的每一种排法至少可排一列。(保证给的数据,有结果且计算的结果不会超过2的63次方)
#include <stdio.h>
int main()
{
/* long long N=1000000000000000000;*/
int a[8],b[8];
int i,n;
for(i=0;i<8;i++)
scanf("%d",&a[i]);
for(i=0;i<8;i++)
scanf("%d",&b[i]);
for(n=100;;n++)
{
if(n%a[0]==b[0])
if(n%a[1]==b[1])
if(n%a[2]==b[2])
if(n%a[3]==b[3])
if(n%a[4]==b[4])
if(n%a[5]==b[5])
if(n%a[6]==b[6])
if(n%a[7]==b[7])
break;
}
printf("%d",n);
return 0;
}
检测时显示超时,有没有更好的方法呢?