c语言怎么去掉数组中重复的字符串,C语言,删除数组中的重复数字然后输出

公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解。

话题:C语言,删除数组中的重复数字然后输出回答:楼主程序有问题的地方:k值的初始化(k需要在每次循环时 跟j同时初始化)楼主在循环对比a、b时,除了第一次执行循环时,对k初始化了,后面执行循环时,由于k没有初始化,故导致k越来越大,而j却在每次循环时,初始化了,故无论如何k,j都不会出现相等的。

参考回答:#include int main(){int n,i,j,arr1[100],arr2[100];int index=0,count,current=0;//current 当前是否重复 count重复多少次scanf(" %u",n);for(i=0;iscanf("%d",arr1[i]);for(i=0;i{current=0;//对结果数组进行是否有和当前数字重复的for(j=0;j{if(arr2[j]==arr1[i]){current=1;count++;break;}}if(current)continue;//如果不重复就将源数组拷贝到结果数组arr2[index++]=arr1[i];}//输出不重复数组for(j=0;jprintf("\t%d",arr2[j]);return 0;}

d4bae87335a0189eb21238f6c4762e2a.png话题:C语言中,如何用删除法删除数组中相同的数字回答:#include #include #include int plification(int a[], int n) {int i,j,k;for(i = 0; i for(j = i + 1; j if(a[i] == a[j]) {for(k = j; k a[k] = a[k + 1];--j;--n;}}}return n;}int main() {int a[30],i,n = 30;printf("原数组:\n");srand((unsigned)time(NULL));for(i = 0; i a[i] = rand()%10;if(i i % 10 == 0) printf("\n");printf("%d ",a[i]);}printf("\n");n = plification(a,n);printf("去除相同元素后:\n");for(i = 0; i if(i i % 10 == 0) printf("\n");printf("%d ",a[i]);}printf("\n");return 0;}

参考回答:main(){ int i,j,t;int a[10]={1,3,3,2,5,1,1,5,2,6};t=a[0]; /*把第一个数赋给t*/for(i=1;i{ if (t==a[i]) /*判断是否有相同的*/{for(j=0;j+ia[i+j]=a[i+j+1];/*后面的数替前面的*/a[9]=0;} /*后面补0*/t=a[i+1]; /*把下一个数赋给t*/}for(i=0;iprintf("%d",a[i]);}话题:关于C语言中的剔除数组中的数字问题回答:#include #define n 10 void main() { int a[10]={2,4,8,4,3,2,9,5,4,3}; int x,i,j=0; scanf("%d",amp;x); for(i=0;ilt;x;i++) /*关键是这个循环一定要正确*/if(a[i]!=x) a[j++]=a[i]; for(i=0;ilt;j;i++) printf("%d ",a[i]); }

参考回答:#include #define n 10 void main() { int a[10]={2,4,8,4,3,2,9,5,4,3}; int x,i,j=0; scanf("%d",amp;x); for(i = 0; i lt; n; i++) //遍历数组 找到 同样的数{ if(x == a[i]) { for (int j = i ; j lt; n - 1; j ++)//剔除 一个 所以 数组 要 减1{a[j] = a[j + 1]; }break; //剔除结束} } //剔除 一个 所以 数组 要 减1for (i = 0 ; i lt; n - 1; i ++ ){printf("%d ",a[i]); }}话题:有个c语言的问题,删除数组中所有相同的数字回答:i=0; while((a+i)) printf("%d",a[i++]); 这就是输出语句。

参考回答:#include "stdio.h" int main(void ) { int a[6]; int i,j; int ge = 0; int num = 6; printf("Please input 6 values(not input 0 : \n"); for(i=0;i6;i++) scanf("%d",a[i]); printf("What you have input is just like the numbers as follows:\n"); for(i=0;i6;i++) printf("%d\n",a[i]); i=0; while(inum) { j=i+1; while(jnum) { if(a[j]==a[i]) { for(ge = j; ge 6; ge++) a[ge]=a[ge+1]; num--; } else j++; } i++; } printf("after correction,What you have input is just like the numbers as follows:\n"); i=0; while(i num) printf("%d\n",a[i++]); return 0; }话题:用c语言编写一个程序:删除数组中重复的数。回答:#includeint main(){ int a[10]={1,2,3,4,5,6,7,8,8,9},b[10];int i,j,g=0,m;b[0]=a[0];for(i=0;i{ m=0;for(j=0;jif(b[j]==a[i])m++;if(m==0)b[++g]=a[i];}for(i=0;iprintf("%d ",b[i]);putchar('\n');return 0;}

参考回答:#include "stdio.h"#include "malloc.h"#include "string.h"void main(){int i=0,j=0,k=0,l=10;int sum[10];printf("输入十个数(按回车隔开):\n");for(j=0;jscanf("%d",sum[j]);printf("输入要删除的数:\n");scanf("%d",i);for(j=0;j{ if(sum[j]==i)k++;if(k1){if(sum[j]==i){sum[j]=sum[j+1];l--;}}}if(k==1)printf("没有重复的%d\n",i);for(j=0;jprintf("%d\n",sum[j]);}

bda1d0c50b235bff7b050667e0330429.png话题:C语言问题,关于数中重复出现的数字回答:#include#define TRUE 1//#define FALSE 0typedef int Bool;void main(){Bool digit_seen[10]={0}; //存放0-9这10个数字出现的次数int digit;long int n;printf("Enter a number:");scanf("%ld",n);while(n0) //用辗转相除法{digit=n%10; //n的右边第1位数if(digit_seen[digit]) //digit_seen[digit]数组这个digit出现过没有,如果出现过则循环break;digit_seen[digit]=TRUE; //如没出现过就把digit_seen[digit]这个数字出现的次数设为1n/=10; // n=n整除10的商,如123/10=12 ,下次用12做上面重复的步骤}if(n0) //如果循环结束后n的值不为0,表示是循环中途用break中断循环的,表示有重复printf("Repeatdigit\n\n");elseprintf("No repeatdigit\n\n");}

参考回答:取这个数的个位,存在digit里,看是不是出现过,如果出现过,就,没有出现过就“出现过”,最后除以10,就相当于把个位去掉,原来的十位变成个位,百位变成十位……digit_seen[i]里的是bool变量,只有真和假,用来表示 i 这个数字是不是出现过例如个位是5,那就判断digit_seen[5]存的是true 还是 false 。如果是true,说明5已经是第二次出现了,如果是false ,就下,以便下次再看见5就判断“出现重复了”话题:急!!!C语言:输出两组数组中相同的数字回答://示例码如下#include #include int main(){int m,n,i,j,flag=0;int *pm,*pn;scanf("%d%d",n,m);pm=(int*)malloc(sizeof(int)*m);pn=(int*)malloc(sizeof(int)*n);for(i=0;iscanf("%d",pm+i);for(i=0;iscanf("%d",pn+i);for(i=0;i{for(j=0;jif(pm[i] == pn[j]){printf("%d ",pn[j]);flag=1;}}if(!flag)printf("NO\n");printf("\n");free(pm);free(pn);return 0;}//示例运行结果F:\c_worka.exe5 75 9 17 123 6987 8 9 16 17 92 6989 17 698

参考回答:没看懂你问题说的和你码想要实现的功能。。但是你码跑出来,对于char,这一个字符串确实是会出来(1,char),(2,char)单独用它举例,当你那个m循环到4的时候,跟n=4的时候匹配,abc4跟def4相等,那就输出(1,char)别的情况,就是输出(2,char)了你是不是没搞懂两层循环啊。你那个m和n不是同时循环的m是最外层循环,从0到4n是里层循环,外层循环执行一次你就循环了一圈,就是,m=0的时候,你n从0循环到4,m=1的时候,你的n也是从0循环到4、、、、我估计你要的效果是for(m = 0,n = 0; m {if你循环体里面那段}你看看是不是这个意思话题:C语言,查找数组里重复出现的数字;回答://如果这题目是在oj上,请去掉所有的注释 #include lt;stdio.hgt; int main() { //用数组下标1~104表示输入的数字 //用数组每个元素的值表示该下标对应的元素输入次数 int a[105]={0},i,n,ni,max; scanf("%d",amp;n); max=a[0]; for(i=0;ilt;n;i++) { scanf("%d",amp;ni); a[ni]++; if(maxlt;a[ni]) max=a[ni]; } for(i=104;igt;0;i--)//想想为什么倒着比较 { if(a[i]==0) continue; if(max==a[i]) { printf("%d %d\n",i,a[i]); break; } } return 0; }

参考回答:可以一次读入N个数据。可以考虑以回车结束读入的一组。参考如下写法:#include"stdio.h"#defineMax100intX[Max]={0,},Y[Max]={0,};intmain(){inti=0,j=0;inta,b;charc=0;printf("输入第一个数组(以空格分开,回车结束)");while((c!='\n'))scanf("%d%c",X+i++,c);c=0;printf("输入第二个数组(以空格分开,回车结束)");while((c!='\n'))scanf("%d%c",Y+j++,c);for(a=0;a话题:C语言删除数组重复数字回答:做一个循环对数组进行遍历,第二个循环对第一个循环遍历出来的数字进行比较删除相同的就好了C语言还有一个简单的方法,但是我现在还没有见到过直接使用的人

参考回答:#include stdio.h #include string.h char s[100]; int main() { int i, ok; scanf("%s", s); do { ok = 1; for (i = 1; s[i]; i++) { if (s[i] == s[i-1]) { ok = 0; strcpy(s[i-1], s[i]); break; } } if (!ok) printf("%s\n", s); } while (!ok); return 0; }

4b46cef8f0022874bca8b862bd4dd481.png话题:请高手用C语言编写一个数组中去掉重复数字后按顺序输出的程序,最回答:#includelt;stdio.hgt; void main() { int a[10],b[10]; int i,j,k,n,m = 0,flag; printf("please input 10 nuber\n"); for(i = 0; i lt; 10; i++) scanf("%d",amp;a[i]); for(i = 0; i lt; 10; i++) { flag = 1; for(j = 1; j lt;= m; j++) if(a[i] == b[j]) { flag = 0; break; } if(flag) { b[j] = a[i]; m++; } } for(i = 1; i lt; m; i++) for(j = i+1; j lt;= m; j++) if(b[i]gt;b[j]) { int temp = b[i]; b[i] = b[j]; b[j] = temp; } for(i = 1; i lt;= m; i++) printf("%-3d",b[i]); } 运行结果 please input 10 nuber 1 2 5 3 54 2 3 1 3 1 1 2 3 5 54 Press any key to continue

参考回答:#include lt;stdio.hgt; #include lt;stdlib.hgt; main( ){ int x[]={1,2,3,4,8,7,1,3,2,1,2,1,4}; int i,j,k,n; n = sizeof(x) / sizeof(int); // 你也可以改写成输入数据个数n, 并输入数据,然后用下面的运算。 for (j=n-1;jgt;=1;j--){ for (i=0;ilt;j;i++) if (x[i]==x[j]) { for (k=j+1;klt;n-1;k++) x[k-1]=x[k]; n=n-1;break; } } // 按大小排队 for (i=0;ilt;n-1;i++) for (j=i+1;jlt;n;j++) if (x[i]gt;x[j]){k=x[i];x[i]=x[j];x[j]=k;} printf("total diff number of data is %d\n",n); for (i=0;ilt;n;i++) printf("%d ",x[i]); return 0; }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值