数据的插入与删除
时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte
总提交:1182 测试通过:225
总提交:1182 测试通过:225
描述
在一组数据(数目不超过10000)中,插入新数,删除所有与给定数相等的数据。
输入
第一行是未排序的一组非负整数,数目不超过10000。以-1作为结束标志。
第二行是要插入的数。
第三行是要删除的数。
输出
第一行输出自小到大排好序的数。如果没有元素,输出“No elements.”(不包括引号)。
第二行输出插入后自小到大排好序的数,以“,”隔开。
第三行输出删除后自小到大排好序的数,以“,”隔开。如果没有元素,输出“No elements.”(不包括引号)。
样例输入
100 98 79 63 44 99 -1
88
79
样例输出
44,63,79,98,99,100
44,63,79,88,98,99,100
44,63,88,98,99,100
提示
题目来源
GUOJ
细节,细节。You can't be too careful.
还是忽略了
-1
1
1
的情况。关于","写的有些麻烦。
代码:
#include<stdio.h>
//数据的插入与删除
#define SWAP(x,y) {int tmp=x; x=y; y=tmp;}
void fuck(int a[],int num)
{
for(int i=0;i<num-1;i++)
for(int j=i+1;j<num;j++)
if(a[i] > a[j])
SWAP(a[i], a[j]);
}
int main()
{
int x, a[10000]={0};
int insert, del;
bool exist = false; // not exist
int num = 0, xiabiao;
while(scanf("%d",&x) && x != -1)
a[num++] = x;
scanf("%d",&insert);
scanf("%d",&del);
//
if(0 == num) printf("No elements.\n");
else
{
fuck(a, num);
for(int i=0;i<num;i++)
{
printf("%d",a[i]);
if(i != num-1) printf(",");
}
printf("\n");
}
//
a[num] = insert;
num ++;
fuck(a, num);
for(int i=0;i<num;i++)
{
printf("%d",a[i]);
if(i != num-1) printf(",");
}
printf("\n");
//
for(int i=0;i<num;i++)
{
if(a[i] == del)
{
exist = true;
xiabiao = i; // 最后一个相等的下标
}
}
if(exist == false || (num == 1 && exist == true)) // 不存在del 或者 删除del后没有元素了
printf("No elements.\n");
else
{
for(int i=0;i<num;i++)
{
if(a[i] != del)
{
printf("%d",a[i]);
if(xiabiao != num-1) // the last one was deleted
if(i != num-1) printf(",");
else
if(i != num-2) printf(",");
}
}
printf("\n");
}
return 0;
}