C语言,删除数组中的重复数字然后输出

题目要求如上,先输入一个数字n为要输入的数字个数。然后输入数组。将输入的数组中的重复数字删除后输出重复数字个数和删除重复后的数组。以下是我自己编写的程序以及思路,运行后只输出一个和n相同的数字,也就是说t=0.

真懂的进来答我谢谢你,说不清楚的就别装逼闭嘴。那些自己也看不懂瞎答混分的我去年买了个表。

#include "stdio.h"

#include "string.h"

void main()

{

int   i,k=1,j=10,a[10]={4,4,4,4,5,4,9,9,9,10};

for(k=i=1;i<10;i++)

{

for(j=0;j<k;j++)

{

if(a[j]==a[i])  break;

}

if(j==k)   a[k++]=a[i];

}

printf(" \n ");

for(i=0;i<k;i++)

{

printf(" %d ",a[i]);

}

扩展资料:

printf()函数的调用格式为:printf("&lt;格式化字符串&gt;",&lt;参量表&gt;)。

其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。

参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。

比如:

int a=1234;

printf("a=%d\n",a);

输出结果为a=1234。

scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include&lt;stdio.h&gt;。

int scanf(const char*restrict format,...);

函数scanf()是从标准输入流stdin(标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-05
#include <stdio.h>

int main()
{

 
   int n,i,j,arr1[100],arr2[100];
int index=0,count,current=0;//current 记录当前是否重复 count记录重复多少次
    scanf(" %u",&n);


for(i=0;i<n;i++)
  scanf("%d",&arr1[i]);

for(i=0;i<n;i++)
{
   current=0;
   //对结果数组进行检查是否有和当前数字重复的
for(j=0;j<index;j++)
{
  if(arr2[j]==arr1[i])
  {
  current=1;
  count++;
  break;
  }

}
if(current)
continue;
  
//如果不重复就将源数组拷贝到结果数组
arr2[index++]=arr1[i];
}

//输出不重复数组
for(j=0;j<index;j++)
printf("\t%d",arr2[j]);

return 0;
}

追问

谢谢,那么我的原程序错在哪儿呢,为什么t总是0.

追答

你的b除了b[0]别的都没有赋值吧

追问

是的,我是想边比较边赋值。就是拿依次拿a中的数和b中已有的数比较,如果没有在b中发现相同的数,就把这个a中的数放进b中。

追答

恩,但是你第一次循环就不会进k==j的判断,所以b就赋值不了,后面的就更不能进判断,所以t=0.
因为第一次i=1,b[0]==a[0],但是b[0]!=a[1]

追问

还是没懂。第一次循环如果发现a[1]!=b[0]就应该K自增1。然后就进入if判断j==k吧。j==k的判断怎么会和之前j的循环有关系呢?

第2个回答  推荐于2017-12-15
楼主程序有问题的地方:k值的初始化(k需要在每次循环时 跟j同时初始化)

楼主在循环对比a、b时,除了第一次执行循环时,对k初始化了,后面执行循环时,由于k没有初始化,故导致k越来越大,而j却在每次循环时,初始化了,故无论如何k,j都不会出现相等的。追问

懂了!真聪明说的很清楚,非常感谢!

但是我修改了判断方法后还是进不了第二次的if判断。
for(i=1;i<n;i++)
{
for(j=0,k=0;b[j]!='\0';j++)
{
if(a[i]==b[j])
k++;
else
continue;
}
if(k==0)
{
b[j]=a[i];
t++;
}
}

追答

额 楼主聪明 刚刚看到 你已经搞定了

本回答被提问者采纳
第3个回答  2013-12-05
#include <stdio.h>
#define N 10 //数组长度
void main()
{
int a[N];//输入的数组
int count=0;//记录重复数字的个数
int sg;//标记是否重复
int i,j;

printf("输入%d个整数:\n",N);
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}

for(i=0;i<N;i++)
{
sg=0;
for(j=i+1;j<N-1;j++)
if(a[j]==a[i])
{
sg=1;
count++;
break;
}

if(sg==0)
printf("%d\t",a[i]);//输出不是重复的数
}
printf("\n重复的数共计:%d个\n",count);
}

这是我的代码,。。。。已经有人给出了,和我的思路差不多,说说你的想法,你的算法应该有问题追问

我的思路在我程序的注释写清楚了啊。就是让b的首元素与a相等,然后依次拿a中元素与b中已经存放的元素比较,发现相同的就跳过,发现不同的就放进b里。按我的代码思路应该怎么改

追答

那你怎么比较没放入b中的元素

相似回答