三种情况分别枚举 细节要注意 总体还是水题。
PS:枚举每一个插入或者删除或者改变的位置,判是否可行。
#include<stdio.h>
#include<string.h>
long n,i,j,l,sum;
char s[1001];
int main()
{
scanf("%d",&n);
while (scanf("%s",s)!=EOF)
{
l=strlen(s);
if (l==n)
{
for (i=0;i<=l-1;i++)
if (s[i]=='1')
sum+=i+1;
if (sum%(n+1)==0)
printf("%s\n",s);
else
for (i=0;i<=l-1;i++)
{
if (s[i]=='1')
{
sum=0;
for (j=0;j<=l-1;j++)
if (j!=i && s[j]=='1')
sum+=j+1;
if (sum%(n+1)==0)
{
s[i]='0';
printf("%s\n",s);
break;
}
}
}
}
else if (l==n+1)
{
for (i=0;i<=l-1;i++)
{
sum=0;
for (j=0;j<=i-1;j++)
if (s[j]=='1')
sum+=j+1;
for (j=i+1;j<=l-1;j++)
if (s[j]=='1')
sum+=j;
if (sum%(n+1)==0)
{
for (j=i;j<=l-2;j++)
s[j]=s[j+1];
s[l-1]=0;
printf("%s\n",s);
break;
}
}
}
else if (l==n-1)
{
for (i=-1;i<=l-1;i++)
{
sum=0;
for (j=0;j<=i;j++)
if (s[j]=='1')
sum+=j+1;
for (j=i+1;j<=l-1;j++)
if (s[j]=='1')
sum+=j+2;
if (sum%(n+1)==0)
{
for (j=l;j>=i+2;j--)
s[j]=s[j-1];
s[i+1]='0';
printf("%s\n",s);
break;
}
sum=i+2;
for (j=0;j<=i;j++)
if (s[j]=='1')
sum+=j+1;
for (j=i+1;j<=l-1;j++)
if (s[j]=='1')
sum+=j+2;
if (sum%(n+1)==0)
{
for (j=l;j>=i+2;j--)
s[j]=s[j-1];
s[i+1]='1';
printf("%s\n",s);
break;
}
}
}
}
}
posted on 2011-06-27 17:21
梦转千寻 阅读(64)
评论(0) 编辑 收藏 引用