。。。看不懂题目,那就直接看样例也行
我学到了:
while(~scanf("%d %d",&a,&b))的效果和while(scanf("%d %d",&a,&b)!=EOF)没有区别…
题中还有一种意思:如果输入5,后边的5个数字肯定是12345.。。。不可能>6…
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=200005;
int a[N],cnt[N],b[N];
bool flag[N];
int main()
{
int n,m;
while(scanf("%d",&n)!=EOF)
{
queue<int>q;
memset(cnt,0,sizeof cnt);
memset(flag,false,sizeof flag);
for(int i=1;i<=n;i++)
{
cin>>a[i];
cnt[a[i]]++;//记录个数
}
int k=0;//k是需要改变的数的个数
for(int i=1;i<=n;i++)
{
if(cnt[i]==0)
b[++k]=i;
if(cnt[i]>1)
flag[i]=true;//标记需要操作的数字
}
cout<<k<<endl;
int pos=1;
for(int i=1;i<=n;i++)
{
if(i>1)
putchar(' ');//控制格式
if(cnt[a[i]]>1)//个数大于1,就需要处理了啊
{
if(a[i]<b[pos] && flag[a[i]])
{
printf("%d",a[i]);
flag[a[i]]=false;
}
else
{
printf("%d",b[pos++]);
cnt[a[i]]--;
}
}
else
{
printf("%d",a[i]);
}
}
puts("");
}
}