
下面代码是我自己写的,看别人代码比较累,所以如果楼主愿意,可以看看下面的代码,我会尽量讲解细致一点。
#include <stdio.h>//sub(manth,fishleft)参数意义:manth表示第几个人分鱼,fishleft表示他分鱼时获得了多少鱼
//函数的返回结果是第manth个人分鱼时剩余的条数,如manth = 5,fishleft = 1,则表示一共捕获了3906条鱼。
int sub(int manth,int fishleft){
if(manth == 1){
fishleft = (5*fishleft +1)
printf("manth = %d,fishleft = %d\n",manth,fishleft)
return fishleft
}
fishleft = 5*sub(--manth,fishleft)+1
printf("manth = %d,fishleft = %d\n",manth+1,fishleft)
return fishleft
}
int main(void){
int manth = 5
int fishleft = 1
printf("%d\n",sub(5,1))
return 0
} //我得到的结果和楼主所给程序运行结果不一致!楼主可以自己计算,如果拍备最后一个人得到的是1条鱼,则他分鱼时应该剩余6条,manth = 2时应该剩余6*5+1 = 31条,信行manth = 3时,应该剩余31*5+1条,最后manth= 5,也就是分鱼开始的时候,应该剩余3906条鱼。
//楼主可以用自己的程序测试,当调用sub(2)时得到的是21,而不袭坦毁是31,就能证明该程序应该是用问题的。
根据提议可知:每个人应分到7个箩筐,每人各3.5筐鱼。采用3*3数组来表示三个人分到的东西。数组的每行每列元素之和都是7;
数组行: 满筐 + 半筐 = 3.5筐;
每个人所得满筐数不会超过3筐;碧厅
每个人至少有1个半筐;
class Program
{
static void Main(string[] args)
{
int[,] fishermen = new int[3, 3]
for (int m = 1m <= 3m++)//A
{
fishermen[0, 0] = m
fishermen[0, 1] = (int)((3.5 - (double)m) / 0.5)
fishermen[0, 2] = 7 - fishermen[0, 1] - fishermen[0, 0]
for (int n = 1n <= 3n++)//B
{
if (n <m)
continue
fishermen[1, 0] = n
fishermen[1, 1] = (int)((3.5 - (double)n) / 0.5)
if (fishermen[1, 1] <铅升 0)
break
fishermen[1, 2] = 7 - fishermen[1, 1] - fishermen[1, 0]
for (int j = 1j <= 3j++)//C
{
if (j <n || j + n + m != 7)
continue
fishermen[2, 0] = j
fishermen[2, 1] = (int)((3.5 - (double)j) / 0.5)
if (fishermen[2, 1] <0)
break
fishermen[2, 2] = 7 - fishermen[2, 1] - fishermen[2, 0]
if (fishermen[2, 1] + fishermen[1, 1] + fishermen[0, 1] == 7 &&
fishermen[2, 0] + fishermen[1, 0] + fishermen[0, 0] == 7)
{
for (int i = 0i <槐慧老 3i++)
{
Console.WriteLine(i + ":" + fishermen[i, 0] + " " + fishermen[i, 1] + " " + fishermen[i, 2])
}
Console.WriteLine("----------------------------------")
break
}
}
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)