qianshang666 发表于 2020-11-26 01:54:59

新手求助,想问一下这个程序的具体算法思想,好像是贪心算法

国王分财产。某国王临终前给儿子们分财产。他把财产分为若干份,然后给第一个儿子一份,再加上剩余财产的1/10;给第二个儿子两份,再加上剩余财产的1/10;…;给第i个儿子i份,再加上剩余财产的1/10。每个儿子都窃窃自喜。以为得到了父王的偏爱,孰不知国王是“一碗水端平”的。请用程序回答,老国王共有几个儿子?财产共分成了多少份?
#include<stdio.h>
void main()
{
   int a, i = 0, n = 0;
   do
   {
             n += 9;                                  //王子数为9的倍数
             a = n;
             for (i = n - 1;i >= 1;i--)
             {
                     if (a % 9 != 0)
                           break;                        // 数目不符跳出 for 循环
                      else
                           a = a * 10 / 9 + i;   // 计算到第 i 个王子时剩余的份数
             }
   } while (i >= 1);                           // 当 i>= 1 时继续循环
      printf("共有%d个儿子,财产分为%d份", n, a);
}

风过无痕1989 发表于 2020-11-27 16:43:00

这道题就是的一个递归的题,最终剩余为0,
第一个儿子拿了 1 份后,剩余 80 份,他又拿了 1/10 后,剩余 72 份,共拿了9份;
第二个儿子拿了 2 份后,剩余 70 份,他又拿了 1/10 后,剩余 63 份,共拿了9份;
第三个儿子拿了 3 份后,剩余 60 份,他又拿了 1/10 后,剩余 54 份,共拿了9份;
第四个儿子拿了 4 份后,剩余 50 份,他又拿了 1/10 后,剩余 45 份,共拿了9份;
第五个儿子拿了 5 份后,剩余 40 份,他又拿了 1/10 后,剩余 36 份,共拿了9份;
第六个儿子拿了 6 份后,剩余 30 份,他又拿了 1/10 后,剩余 27 份,共拿了9份;
第七个儿子拿了 7 份后,剩余 20 份,他又拿了 1/10 后,剩余 18 份,共拿了9份;
第八个儿子拿了 8 份后,剩余 10 份,他又拿了 1/10 后,剩余9 份,共拿了9份;
第九个儿子拿了 9 份后,剩余0 份,                                              共拿了9份;
页: [1]
查看完整版本: 新手求助,想问一下这个程序的具体算法思想,好像是贪心算法