网址:http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=2264
这道题写的有点恼火,题本身其实非常简单,但是最后因为输出格式的原因交了两三次,因为每个要删除的节点并没有实际删除。
如果用单链表的话就不会出现这种情况。
#include<stdio.h>
#include<string.h>
struct node
{
char data[50];
int num;
int vis;
}title[100];
int main()
{
int n,i;
scanf("%d",&n);
int sum;
for(i = 0; i < n; i++)
{
char str[10];
sum = 0;
int x = 1000;
while(1)
{
scanf("%s",str);
if(!strcmp(str,"End"))
break;
if(!strcmp(str,"Add"))
{
scanf("%s",str);
strcpy(title[sum].data,str);
title[sum].num = x;
//初始化都为1
title[sum].vis = 1;
x++;
sum++;
}
if(!strcmp(str,"Delete"))
{
scanf("%s",str);
int j;
for(j = 0; j < sum; j++)
if(!strcmp(str,title[j].data))
//并没有真正删除 只是将删除的数标记为0
title[j].vis = 0;
}
}
int k;
//先找见第一个没有删除的元素 单独输出
for(k = 0; k < sum; k++)
{
if(title[k].vis == 1)
{
printf("%d",title[k].num);
break;
}
}
for(k = k + 1; k < sum; k++)
{
if(title[k].vis == 1)
{
printf(" %d",title[k].num);
}
}
printf("\n");
for(k = 0; k < sum; k++)
{
if(title[k].vis == 1)
{
printf("%s",title[k].data);
break;
}
}
for(k = k + 1; k < sum; k++)
{
if(title[k].vis == 1)
{
printf(" %s",title[k].data);
}
}
printf("\n");
}
return 0;
}
转载于:https://blog.51cto.com/20111564/1403382