零起点学算法83——数组中删数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了零起点学算法83——数组中删数相关的知识,希望对你有一定的参考价值。
Description
在给定的数组中删除一个数
Input
多组测试,每组第一行输入1个整数n(n<20),然后是n个整数 第二行输入1个整数m
Output
删除在第一行的n个整数中第一次出现数字m并删除,然后按照顺序输出剩下的数,
Sample Input
4 1 2 3 4
3
Sample Output
1 2 4
HINT
m有可能在原数组中找不到,找不到则输出原数组
Source
新手求这题代码。。。
我写的 输入题目答案对了。。但不知哪错了,不能AC。。。太复杂了吗?
using namespace std;
int main()
int a[20];
int m;
int i=0;
cout<<"Input the Number";
for (i=0;i<20;i++)
cin>>a[i];
cout<<endl;
cout<<"Input Your Delete Number:";
cin>>m;
for (int j=0;j<19;j++)
a[j]=a[j+1];
for (int k=0;k<=19;k++)
cout<<a[k]<<endl;
int count;
for (int j=0;j<19;j++)
if (a[j]==m)
count=j;
break;
while(count<19)
a[count]=a[count+1];
count++;
cout<<endl;
cout<<"JieGuo:"<<endl;
for (int j=0;j<18;j++)
cout<<a[j]<<endl;
return 0;
你可以修改一下,这样的话,看看能否实现你说的那个算法。或许你还可以有自己的其他的比我的算法更好的算法。我已经尽力了。 参考技术A 要试着自己实现代码,, 别人实现,对你没有帮助的!追问
可是我AC不了。。。
追答t初始化成 -1 , 试试,,
追问不对。。TAT
追答找到t 之后, 输出这样输出:
for( i=0; i<n; ++i)if(i==t) continue;
printf("%d",a[i]);
printf("\\n");
你把你的括号放在单独一行,这样阅读起来方便
不行啊。。
追答就不改你的代码了,我写一个。 我没测试过, 但是大概思路是着样的
scanf("%d",&n); // 输入n
for(int i=0; i<n; ++i) // 输入 数组
scanf("%d",&a[i]);
scanf("%d",&m); // 输入m
id=-1; // 记录查找到m的下标
for i=0; i<n; ++i) // 查找m, 并记录位置到 id
if(a[i]==m)
id=i; break;
for(int i=0; i<n-1; ++i)
if(i==id) continue; // 如果下标为id 则表示为m 不输出
if(flg)
printf("%d ",a[i]), flg=false; // 第一次输出没有空格
else
printf(" %d",a[i]); // 之后输出有空格
printf("\\n");本回答被提问者采纳
Problem C: 零起点学算法82——数组中查找数
#include <stdio.h>
int
main(
int
argc,
char
*argv[])
{
int
n,b,i,m,flag=0,a[20];
while
(
scanf
(
"%d"
,&n)!=EOF){
for
(i=0;i<n;i++){
scanf
(
"%d"
,&a[i]);
}
scanf
(
"%d"
,&m);
for
(i=0;i<n;i++){
if
(a[i]==m){
b=i;
flag=1;
break
;
}
}
if
(flag==1){
printf
(
"%d
"
,b);
}
else
{
printf
(
"No
"
);
}
flag=0;
}
return
0;
}
以上是关于零起点学算法83——数组中删数的主要内容,如果未能解决你的问题,请参考以下文章
1145: 零起点学算法52——数组中删数II (有问题!)