题目是:有天夜里5个强盗A、B、C、D、E抢到一大堆金币(金币个数不超过n个,n<=100000000),可是怎么也无法平均分成5份,吵吵嚷嚷…… 吵累了,只好先睡觉,准备第二天再分。 夜深了,一个强盗A偷偷爬起来,先拿了一个金币私下放自己口袋藏好,再将金币分为5等份,将自己的那一份再私藏好就去睡觉了。 随着第二个强盗B也爬起来,也是私拿了一个金币再分5等份,也私藏起自己那份就睡觉去了。 后来的三个强盗C、D、E也都是这样办的。 问最初有多少个金币?(最初的金币个数有多种可能,请输出n以内所有可能,从小到大排列)
Input
输入一个数,n。请输出金币数不超过n的可能的初始金币个数。
Output
初始金币个数的多种可能(初始金币个数小于等于n)。 请输出不超过n的“所有的”可能,从小到大排列出,中间空格相连。 如果不超过n没有一种可能,输出impossible(无标点,无大写)例如输入10,则输出impossible
而我自己编的程序是:
#include<stdio.h>
//强盗分赃
int count;//记录循环次数
int func(int a)
{
if((((a-1)%5)!=0)&&(count<5)){
return 0;
}
else{
if(count==5){
count=0;
return 1;
}
else{
count++;
func(((a-1)/5)*4);
}
}
}
int main()
{
int n;
do{
scanf("%d",&n);
}while(n<0||n>100000000);
if(n<3121){
printf("impossible");
return 0;
}
else{
int x=3121;
count=0;
while(x<=n){
if(func(x)!=0) //判断是否符合分赃方法
printf("%d ",x); //符合则输出该数据
x++; //自增
}
return 0;
}
}
试问为什么我输入大于3121的任何数据都只会输出第一个数据,明明还有其他数据是符合的
Input
输入一个数,n。请输出金币数不超过n的可能的初始金币个数。
Output
初始金币个数的多种可能(初始金币个数小于等于n)。 请输出不超过n的“所有的”可能,从小到大排列出,中间空格相连。 如果不超过n没有一种可能,输出impossible(无标点,无大写)例如输入10,则输出impossible
而我自己编的程序是:
#include<stdio.h>
//强盗分赃
int count;//记录循环次数
int func(int a)
{
if((((a-1)%5)!=0)&&(count<5)){
return 0;
}
else{
if(count==5){
count=0;
return 1;
}
else{
count++;
func(((a-1)/5)*4);
}
}
}
int main()
{
int n;
do{
scanf("%d",&n);
}while(n<0||n>100000000);
if(n<3121){
printf("impossible");
return 0;
}
else{
int x=3121;
count=0;
while(x<=n){
if(func(x)!=0) //判断是否符合分赃方法
printf("%d ",x); //符合则输出该数据
x++; //自增
}
return 0;
}
}
试问为什么我输入大于3121的任何数据都只会输出第一个数据,明明还有其他数据是符合的
