我正在编写一个从键盘输入中读取整数的程序,然后找到该事件,然后按降序对它们进行排序。 我得到了发生和下降但是当我输入相同的整数时,如果我输入8 7 8则重复它们 它就像 8 2 2 8 2 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;
}
答案 0 :(得分:2)
此代码的问题在于您正在对数组进行排序时打印它。输入数字1 2 3 4将导致数字2 1 4 1 2 1 1 1被输出。要完成您想要的操作,您应该将打印部件移出分拣循环。即使这样,当数字在输入中多次出现时,输出也不会仅包含一次(例如,8 7 8 - > 8 2 8 2 7 2)。要做到这一点,如果它与您输出的前一个数字相同,则不应输出该数字。
另一件事,在排序循环中,您可能会访问
行中的非现有数组元素for (j = 0; j < last; 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]]);