Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 子分组算法_C_Algorithm_Grouping - Fatal编程技术网

C 子分组算法

C 子分组算法,c,algorithm,grouping,C,Algorithm,Grouping,最近,有人让我做一个C程序,将数字“分组”(他的单词,不是我的!)成对。 下面是它的工作原理。 首先,用户输入最大范围:(比方说)10 现在,用户输入一个数字:(假设)4。 然后,程序将4和5分组在一起。(即n和n+1) 下一个用户输入:8 程序组8和9也是如此。 现在,事情还在继续。 例外情况:如果用户输入一个已经分组的数字,如4、5、8或9。然后它所属的组被完全删除。此外,程序会使需要与已配对的号码配对的输入无效。如果4和5是成对的,则3不是有效的输入。 此外,不允许输入极端值(此处为1和1

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

我使用Visual Studio 2013用C编写了上述程序。我提供了下面的代码。 我的问题是: A) 我如何使我的代码变得更好?(除了在接受max输入后初始化数组之外) 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");
}
#包括
#内因库德
#定义数组大小为10
int组[array_size][2]={0};
int n=0,max=0,search=0,max_mem=0;
int t计数=2;
无效排序(int x[][2]);
无效打印组();
无效测试_print();
void main()
{
组[0][0]=0;
组[0][1]=1;
printf(“输入一个数字:”);
扫描频率(“%d”和最大值);
max_mem=(max/2)+1;
if(最大内存>数组大小)
{
printf(“分配的内存不足!”);
返回;
}
其他的
{
组[max_mem-1][0]=max;
}
打印组();
测试打印();
而(1)
{
printf(“输入一个数字:”);
扫描频率(“%d”和“&n”);
如果((n=max-1))
{
printf(“无效条目!”);
继续;
}
搜索=0;
对于(int i=1;i(%d,%d)”,组[i][0],组[i][1]);
//getch();
搜索=1;
}
}
}
如果(搜索!=1)
{
[1][0]=n组;
组[1][1]=n+1;
}
printf(“\n传感器!\n”);
排序(组);
//clrsc();
打印组();
测试打印();
}
}
无效排序(整数x[][2])
{
int i,j,t[1][2];

for(i=1;i听起来像是一些随机的想法。您可以通过使用一维数组来简化代码,其中数组中的每个条目都是

  • 0表示不在组中的数字
  • 组的第一个数字为1
  • 2表示组的第二个数字
例如,如果数组[4]是1,数组[5]是2,那么4和5是一个组

当用户输入一个新的数字时,很容易更新数组

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

听起来你想要一个)hashmap的使用将有助于解决上述问题