C 整数是重复的吗?
我正在写一个程序,从键盘输入中读取整数,找到出现的整数,然后按降序排序。 我得到了发生数和递减数,但当我输入相同的整数时,如果我输入8,它们会重复 就像 8 2 8 2 7 1 请帮忙?? 这是我的密码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] = {
#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;i if(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;j if(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,则此部分用于在没有元素的情况下防止打印第一个元素。