c - 在程序中找不到将从数组中删除重复数字的错误
问题描述
问题陈述:从数组中删除重复的数字并再次打印我的方法是 1. 将数字与所有其他数字进行比较并找到重复的 2. 将重复的索引发送到函数 delindex 并将所有数字移动 1 并将索引大小减 1。问题是 18 没有移动。
#include<stdio.h>
int a[20]={11,12,13,15,12,14,16,17,11,12,14,15,18,12},i,j,index=13,x,y,p;
void delindex(int n)
{
int i,j,ii;
if(n==index)
{
index--;
}
else
{
for(i=n;n<index;n++)
{
j=i+1;
a[i]=a[j];
}
index--;
}
}
int main()
{
int i;
for(i=0;i<=index;i++)
{
printf("%d\t",a[i]);
}
printf("\n");
for(x=0;x<index;x++)
{
for(y=x+1;y<=index;y++)
{
if(a[x]==a[y])
{
delindex(y);
}
}
}
for(i=0;i<=index;i++)
{
printf("%d\t",a[i]);
}
return 0;
}
解决方案
for(i=n;n<index;n++)
输入的行void delindex(int n)
应该是for (int i = n; i < index; ++i)
- 线
for(y=x+1;y<=index;y++)
{
if(a[x]==a[y])
{
delindex(y);
}
}
应该
for(y=x+1;y<=index;)
{
if(a[x]==a[y])
{
delindex(y);
} else {
++y;
}
}
因为a[] = {1, 2, 1, 1}
之前的代码将是{1, 2, 1}
以下code
可以工作:
#include <stdio.h>
int a[] = {11, 12, 13, 15, 12, 14, 16, 17, 11, 12, 14, 15, 18, 12};
int index = sizeof(a) / sizeof(a[0]) - 1;
void delindex(int n) {
if (n == index) {
--index;
} else {
for (int i = n; i < index; ++i) a[i] = a[i + 1];
index--;
}
}
int main() {
printf("before remove duplicate\n");
for (int i = 0; i <= index; ++i) printf("%d\t", a[i]);
printf("\n");
for (int x = 0; x < index; ++x)
for (int y = x + 1; y <= index;)
if (a[x] == a[y])
delindex(y);
else
++y;
printf("after remove duplicate\n");
for (int i = 0; i <= index; ++i) printf("%d\t", a[i]);
printf("\n");
return 0;
}
推荐阅读
- apache - 无法使用 Apache poi 在 excel 标题上设置图像
- javascript - 用于刻度带的 D3 自定义反转功能
- c - 有没有办法使用 C 代码验证正则表达式模式的语法
- zsh - 如何完成包含空格的可变数量的参数
- python - Visual Studio 中的 Django:“ImportError 无法导入名称 '_remove_dead_weakref'”
- asp.net - Microsoft.AspNet.WebApi 5.2.7 路由问题
- javascript - 在页面加载时隐藏 facebook 客户聊天插件的问候对话框
- sql-server - SQL 列更新解决数据质量问题
- javascript - 如何避免旋转时自动左对齐?
- openvino - 如何为 OpenVino 永久设置环境变量