69,369
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
int candy(int n,int m)
{
int i,sum=0,flag=0;
int y[100];//定义第i个小朋友未拿走糖果前的剩余份数
int x[100];//定义第i个小朋友拿走的份数
//计算第i个小朋友获得的糖果数以及人数,份数
for(i=1;i<=m;i++)
{//计算第i个小朋友未拿走糖果前的剩余份数
if(i==1)
y[i]=n;//第一个拿走之前的份数为n
else
y[i]=(y[i-1]-i+1)*9/10;
}
for(i=1;i<=m;i++)
{
//计算第i个小朋友拿走糖果的份数
if(i==1)
x[i]=1+(n-1)/10;
else
x[i]=4+(y[i]-i)/10;
}
for(i=1;i<=m;i++)
{
sum+=x[i];
}//计算总拿走的糖果数
if(sum==n)
flag=1;
else
flag=0;
return flag;
}
void main()
{
int n,m,i,flag;
for(n=11;;n++)
{
for(m=1;;m++)
{
flag=candy(n,m);
if(flag)
break;
}
if(flag)
break;
}
printf("一共有%d个小朋友,老师将糖果分成了%d等份",m,n);
}
for(i=1;i<=m;i++)
{
//计算第i个小朋友拿走糖果的份数
if(i==1)
x[i]=1+(n-1)/10;
else
x[i]=4+(y[i]-i)/10;
}
第一个问题 x[i]=4+(y[i]-i)/10; 按你的逻辑 x[i]=i+(y[i]-i)/10;
第二个问题:计算过程中是会出现浮点数的,你都用int数组装了,意味着你可能得不到一个合适的解
另外 数组不从0下标开始 好别扭。。。