Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting - Fatal编程技术网

C 整数是重复的吗?

C 整数是重复的吗?,c,sorting,C,Sorting,我正在写一个程序,从键盘输入中读取整数,找到出现的整数,然后按降序排序。 我得到了发生数和递减数,但当我输入相同的整数时,如果我输入8,它们会重复 就像 8 2 8 2 7 1 请帮忙?? 这是我的密码 #pragma warning (disable :4996) #include <stdio.h> #include <stdlib.h> int main(){ int input; int inputarr[50], count[50] = {

我正在写一个程序,从键盘输入中读取整数,找到出现的整数,然后按降序排序。 我得到了发生数和递减数,但当我输入相同的整数时,如果我输入8,它们会重复 就像 8 2 8 2 7 1 请帮忙?? 这是我的密码

#pragma warning (disable :4996)
#include <stdio.h>
#include <stdlib.h>


int main(){

    int input;
    int inputarr[50], count[50] = {0};
    int i=0, j;
    int last = 0;

    printf("Enter numbers \n");


    ///getting int
    while (scanf("%d", &input) > 0)
    {
        inputarr[i] = input;
        i++;
    }

        last = i;

        printf("  N       Count\n");
        printf("-----     -----\n");
        int a;

        /// increment count
        for (i = 0; i < last; i++){
            count[inputarr[i]] = count[inputarr[i]] + 1;
        }

        /////ascending
        for (i = 0; i < last; i++)
        {
            for (j = 0; j < last; j++){
                if (inputarr[j]<inputarr[j + 1])
                {
                    int temp = inputarr[j];
                    inputarr[j] = inputarr[j + 1];
                    inputarr[j + 1] = temp;
                }
            }
            printf(" %d           %d\n", inputarr[i], count[inputarr[i]]);
        }
    return 0;
}
#杂注警告(禁用:4996)
#包括
#包括
int main(){
int输入;
int-inputarr[50],count[50]={0};
int i=0,j;
int last=0;
printf(“输入数字”);
///变智力
而(scanf(“%d”,&input)>0)
{
inputarr[i]=输入;
i++;
}
last=i;
printf(“N计数\N”);
printf(“----\n”);
INTA;
///增量计数
对于(i=0;iif(inputarr[j]此代码的问题是,在排序时打印数组。输入数字1 2 3 4将导致输出数字2 1 4 1 2 1 1 1 1 1 1 1。要完成所需操作,应将打印部分移出排序循环。即使在输入中多次出现数字时,输出也不会包含只需输入一次(例如:8 7 8->8 2 8 7 2)。如果数字与之前输出的数字相同,则不应输出该数字

另一件事,在排序循环中,您可能正在访问行中不存在的数组元素

for (j = 0; j < last; j++){
(j=0;j{
当j=last-1时,您正在访问可能不存在的最后一个元素

解决所有这些问题后,代码可能如下所示:

    for (i = 0; i < last; i++)
    {
        for (j = 0; j < last-1; j++){
            if (inputarr[j]<inputarr[j + 1])
            {
                int temp = inputarr[j];
                inputarr[j] = inputarr[j + 1];
                inputarr[j + 1] = temp;
            }
        }
    }
    if (last == 0)
        return 0;
    printf(" %d           %d\n", inputarr[0], count[inputarr[0]]);
    for(i = 1; i < last; i++)
        if (inputarr[i] != inputarr[i-1])
            printf(" %d           %d\n", inputarr[i], count[inputarr[i]]);
(i=0;i { 对于(j=0;jif(inputarr[j]排序后,通过跳过具有相同值的
inputarr
显示。当j=last-1=>inputarr[j+1]=inputarr[last]时,查看inputarr,此外,我认为应该进行反转(在反转时)因为我认为只有一个循环是不够的,谢谢!它工作得很好!!你能解释一下后面的部分吗?比如它是如何工作的?我不太确定我是否明白了:'(让我们看一看数组1 4 6 4。排序时,它看起来像6 4 1,并且您希望只打印该数组中的每个数字一次。请注意,当数组中有多个数字时,排序后它们都是一个接一个的。让我们将该组相同数字中的第一个称为原始数字,每隔一个称为副本。请注意每个副本后面的数字等于该副本的数字,每个原件后面的数字与该原件不同。通过使用
if(inputarr[i]!=inputarr[i-1])
排除所有副本,您只打印原件。@3348701您还需要单独打印第一个元素,因为您无法检查之前的元素是否不同(这是第一个元素,因此之前的元素不存在)。如果(last==0)返回0,则此部分
用于在没有元素的情况下防止打印第一个元素。