【发布时间】:2018-03-20 16:26:38
【问题描述】:
在 C 语言中,我只能使用 stdio.h,而不能使用数组。
问题是:我需要写函数“void MaxLegnth()” 输入整数,只要它们是正数,如果输入负数,输入部分将停止。 我需要找到最长的相同数字序列,以及它发生了多少次。例如:
输入:
19 19 97 97 97 97 681 681 681 681 97 36 36 36 97 97 97 97 36 -19
输出:
maximum length - 4
occurred - 3
我一直在努力解决这个问题并想出了这个问题,但我不知道如何解决它:
void MaxLength()
{
int num1, temp, currentmax = 0, countmax = 0, globalmax = 0;
printf("Please enter positive integers: ");
scanf_s("%d", &num1);
temp = num1;
if (num1 > 0)
currentmax++;
while (num1 > 0)
{
scanf_s("%d", &num1);
if (num1 < 0)
{
//currentmax--;
break;
}
if (num1 == temp)
{
currentmax++;
temp = num1;
if (currentmax > globalmax)
globalmax = currentmax;
}
else
{
if (currentmax > globalmax)
{
globalmax = currentmax;
countmax = 1;
currentmax = 1;
temp = num1;
}
if (currentmax < globalmax)
{
currentmax = 1;
temp = num1;
}
if (currentmax == globalmax)
countmax++;
}
}
printf("\ncurrent %d\n", currentmax);
printf("\nglobal %d\n", globalmax);
printf("\ncount %d\n", countmax);
}
对不起,巨大的文字墙。任何帮助将不胜感激!
【问题讨论】:
-
根据您的输入,正确答案是“最大长度 - 4 次出现 - 3”还是“最大长度 - 4 次出现 - 2”?这是我害怕的“相同数字”部分。您是否必须检测出 3 个最长的序列中,其中 2 个是相同的数字?
-
出现的部分只指最长序列出现的次数,所以无论序列是 2 2 2 2 还是 4 4 4 4 都是最长的,都会被计算在内,我希望这能解决你的问题
-
为什么在你的例子中
occured - 3? -
@IlyaBursov 97 出现 4 次,然后 681 出现 4 次,然后 97 又出现 4 次。这是连续出现 4 次。
-
我认为我没有正确解释自己。它是“发生 - 3”,因为最长的序列(4 个连续相同的数字)出现了 3 次,所以虽然 97 97 97 97 和 681 681 681 不一样,但它们都是最长的序列,都会被计算在内,抱歉对自己的措辞不好
标签: c algorithm loops do-while