P2911 求最小整数和当输入骰子面数时

思路:
输入骰子的面数后求出现次数最多的最小整数和:可知整数和范围已经确立,那么就让每个不同的整数和为数组下标来存储有多少个面数相加等于此整数,再备份一份此数组。之后拿原数组存储的数值进行降序冒泡排序,得出最大值。再用备份了原数组的数组和最大值进行if语句的等于的判断,一得到第一个相同的数组数值,则此时这个数组元素的下标就是最小整数和。

错误总结:
1.不要用三维数组,不然很混乱且可能运行出错
2.正确写出数组的赋值

include <stdio.h>

int main()
{
int a, b, c, i, m, n, k;
int sumcnt[10000] = {0};//数组赋值应该这么写;
int sumcount[10000] = {0};
scanf("%d %d %d", &a, &b, &c);

for (i=3; i<=a+b+c; i++)//不要用三维数组; 
{
	for (m=1; m<=a; m++)
	{
		for (n=1; n<=b; n++)
		{
			for (k=1; k<=c; k++)
			{
				if (m+n+k == i)
				{
					sumcnt[i]++;
				}
			}
		}
	}
}

for (i=3; i<=a+b+c; i++)
{
	sumcount[i] = sumcnt[i];
}

for (n=4; n<=a+b+c; n++)
{
    if (sumcnt[n] > sumcnt[3])
	{
		int t;
		t = sumcnt[3];
		sumcnt[3] = sumcnt[n];
		sumcnt[n] = sumcnt[3];
	}
}

for (i=3; i<=a+b+c; i++)
{
	if (sumcnt[3] ==sumcount[i])
	{
		printf("%d", i);
		break;
	}
}

return 0;

}

posted @ 2025-07-16 20:59  xinday  阅读(12)  评论(0)    收藏  举报