房天下 > 房天下问答 > 业主生活 > 其他
  • 定和值的程序分析与纠错

    我在一本书上见到了这么一道题目: 某班有n个同学,学号分别为(1,2,...,n)。为了每天指派若干个同学值日,他们放弃传统单调的轮流值日,别出心裁采用“定和值日”法,每天所指派值日同学的学号之和须等于其班号m(n <m <n*(n+1)/2)。并且规定:不允许任何两天值日的同学完全一样。那么编写程序求出可持续的值日天数f(n,m)。 以下是书上的解答: #include <stdio.h>int main(){ int b,p,i,j,m,n,k; static int a[51][101]; long s=0; printf("请输入学生人数:"); scanf_s("%d",&n); printf("请输入定和值:"); scanf_s("%d",&m); a[1][0]=1;/*数组元素赋初值*/ a[1][1]=1; for(j=2;j<=n;j++) { for(i=j;i<=m;i++)/*计算a(2,m),...,a(n,m)*/ { p=i-j; b=0; for(k=1;k<j-1;k++) b+=a[k][p]; a[j][i]=b; } s+=a[j][m]; } printf("f(%d,%d)=%1d",n,m,s); return 0;}首先惭愧的说,我还没有理解这个程序所表达的意思,然后我发现它是有错误的,比如输入n=3,m=5,结果应该是可以持续1天,但是程序运行结果是0,希望有人能帮我分析一下这段代码的意义,然后可以的话把其中的错误找出来,谢谢!

    提问者:侠客联盟

    发布于2011-01-17

共1个回答
  • 不在回忆 丨Lv 3
    刚看到的。讲老实话,因为觉得没有彻底解决,所以也就没想要这个分数的。应你的要求,现发在这里。-------------1、这个程序的算法根本不对。你如果是做作业,你就好好动动脑子写一写,否则这样的程序不去深究也罢。2、改了一下试试也不行。里面好像缺少求最大天数部分。如10人,和数为15,算出来是1。但是我大概找出了3个值日天数。就是说里面好像缺求最大组合的算法部分。
    +1 2011-01-18 举报
热门人气推荐
免责声明:问答内容均来源于互联网用户,房天下对其内容不负责任,如有版权或其他问题可以联系房天下进行删除。