题目叙述
某国王临终前给儿子们分财产。他把财产分为若干份,然后给第一个儿子一份,再加上剩余财产的1/10;给第二个儿子两份,再加上剩余财产的1/10;……;给第i个儿子i份,再加上剩余财产的1/10。每个儿子都窃窃自喜,以为得到了父王的偏爱,孰不知国王是“一碗水端平”的。请回答老国王共有几个儿子?财产共分成了多少份?
程序清单
#include<stdio.h>
int f(int n,int m){ // 表示第 n 个孩子看到的财产数量(前一个孩子分后剩下的)
m = m - n;
if( m%10==0 ){ // 判断 m 能否被10整除
if(m==0) // 递归出口,第 n 个孩子分完剩下的应该是 0,
{
return n; // 当 m 等于 0 时,对应的 n 就是孩子的数量
}else{
m=m/10*9; // 下一个孩子看到的财产数量
f(n+1,m); // 递归判断每个孩子是否符合题意,直至最后剩下的是 0。
}
}else{
return 0;
}
}
int main(){
int m = 2; // m 等于1时,对应于1个孩子的情况,因为有i个情况,所以m从2开始探测。
bool endSearchFlag = false; // 结束 m 探测的标志 ,找到符合题意的 m 时为真
while(endSearchFlag==false){
int n = f(1,m);
if( n != 0){
printf("国王共有 %d 份财产,%d 个儿子。\n",m,n);
endSearchFlag = true;
}else{
m++;
}
}
return 0;
}
运行结果