gpt4 book ai didi

c - 子分组算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:27:00 25 4
gpt4 key购买 nike

最近,有人要我编写一个 C 程序,将数字“分组”(他的话,不是我的话!)。这是它的工作原理。首先,用户输入最大范围:(比方说)10现在,用户输入一个数字:(比方说)4。然后,程序将 4 和 5 组合在一起。 (即 n 和 n+1)下一个用户输入:8程序组 8 和 9 也是如此。现在,这还在继续。异常(exception):如果用户输入一个已经分组的数字,如 4、5、8 或 9。那么它所属的组将被完全删除。此外,该程序会使需要与已经配对的数字配对的输入无效。例如。如果 4 和 5 配对,则 3 不是有效输入。此外,不允许输入极端值(此处为 1 和 10)。

我使用 Visual Studio 2013 用 C 语言编写了上述程序。我提供了以下代码。我的问题是:A)我怎样才能使我的代码变得更好?(除了在接受最大输入后初始化数组)B) 更重要的是,有人能告诉我这个算法是什么吗?这是标准问题吗?它有任何现实世界的应用程序/实现吗?或者这只是一些随意的想法?

#include<stdio.h>
#inlcude<conio.h>

#define array_size 10

int group[array_size][2] = { 0 };
int n = 0, max=0, search = 0, max_mem = 0;
int tcount = 2;
void sort(int x[][2]);
void print_groups();
void test_print();

void main()
{
group[0][0] = 0;
group[0][1] = 1;

printf("Enter a number:");
scanf_s("%d", &max);

max_mem = (max/2)+1;
if (max_mem > array_size)
{
printf("Not enough memory assigned!");
return;
}
else
{
group[max_mem-1][0] = max;
}

print_groups();
test_print();

while (1)
{
printf("Enter a number:");
scanf_s("%d", &n);
if ((n <= 1) || (n >= max-1))
{
printf("Invalid entry!");
continue;
}
search = 0;
for (int i = 1; i < max_mem; i++)
{
for (int j = 0; ((j < 2)&&(search!=1)); j++)
{
if (n == group[i][j])
{
group[i][0] = 0;
group[i][1] = 0;
search = 1;
}
if (group[i][0]==n+1)
{
printf("Already group exists -> (%d,%d)", group[i][0], group[i][1]);
//getch();
search = 1;
}

}
}
if (search != 1)
{
group[1][0] = n;
group[1][1] = n + 1;
}

printf("\nSorting!\n");
sort(group);
//clrscr();
print_groups();
test_print();
}
}

void sort(int x[][2])
{
int i, j, t[1][2];
for (i = 1; i <= max_mem - 2; i++)
for (j = 2; j <= max_mem-1 - i; j++)
if (x[j - 1][0] >= x[j][0])
{
t[0][0] = x[j - 1][0];
x[j - 1][0] = x[j][0];
x[j][0] = t[0][0];
t[0][1] = x[j - 1][1];
x[j - 1][1] = x[j][1];
x[j][1] = t[0][1];
}
}

void print_groups()
{
printf("The group is:\n%d ", group[0][1]);
for (int i = 1; i < max_mem-1; i++)
{
if (group[i][0] != 0)
{
printf("(");
printf("%d,", group[i][0]);
printf("%d", group[i][1]);
printf(")");
}
}
printf(" %d.", group[max_mem - 1][0]);
printf("\n");
}

void test_print()
{
printf("Array Formation:\n");
for (int i = 0; i < array_size; i++)
{
printf(" %d,%d ", group[i][0], group[i][1]);
}
printf("\n");
}

最佳答案

听起来这只是一些随意的想法。您可以使用一维数组来简化代码,其中数组中的每个条目都是

  • 0 表示不在一组中的数字
  • 1 为一组的第一个数字
  • 2为一组的第二个数

例如array[4]为1,array[5]为2,则4和5为一组。

当用户输入新数字时,很容易更新数组。下面是一个伪代码示例,说明如果用户输入数字 7,数组将如何更新

if (array[7] == 0 and array[8] == 0) 
array[7] = 1, array[8] = 2
else if (array[7] == 0 and array[8] == 1)
input is invalid
else if (array[7] == 1)
array[7] = 0, array[8] = 0
else if (array[7] == 2)
array[6] = 0, array[7] = 0

关于c - 子分组算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23728695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com