本蒟蒻写这道题的时候,一开始是这样的:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m[105],len,ans,Copy[105];
char ch;
bool check(){
for(int i = 1;i <= len / 2;i ++)
if(m[i] != m[len - i + 1])
return 1;
return 0;
}
int main(){
scanf("%d",&n);
while(~scanf("%c",&ch)){
if(ch != '\n')
m[++ len] = (ch >= '0' && ch <= '9') ? ch - '0':ch - 'A' + 10;
}
for(int i = 1;i <= len;i ++)
swap(m[i],m[len - i + 1]);
while(check() && ans <= 30){
ans ++;
for(int i = 1;i <= len;i ++){
Copy[i] += m[i] + m[len - i + 1];
Copy[i + 1] += Copy[i] / n;
Copy[i] %= n;
}
if(Copy[len + 1] != 0)
len ++;
for(int i = 1;i <= len;i ++)
m[i] = Copy[i];
memset(Copy,0,sizeof(Copy));
}
if(ans <= 30)
printf("STEP=%d",ans);
else
printf("Impossible!");
return 0;
}
结果,除了最后一个测试点,其他全错,下个数据点一看,欸,没错啊,咋回事呢?
然后我又换了一种while(scanf()),就是:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m[105],len,ans,Copy[105];
char ch;
bool check(){
for(int i = 1;i <= len / 2;i ++)
if(m[i] != m[len - i + 1])
return 1;
return 0;
}
int main(){
scanf("%d",&n);
while(scanf("%c",&ch) != EOF){
if(ch != '\n')
m[++ len] = (ch >= '0' && ch <= '9') ? ch - '0':ch - 'A' + 10;
}
for(int i = 1;i <= len;i ++)
swap(m[i],m[len - i + 1]);
while(check() && ans <= 30){
ans ++;
for(int i = 1;i <= len;i ++){
Copy[i] += m[i] + m[len - i + 1];
Copy[i + 1] += Copy[i] / n;
Copy[i] %= n;
}
if(Copy[len + 1] != 0)
len ++;
for(int i = 1;i <= len;i ++)
m[i] = Copy[i];
memset(Copy,0,sizeof(Copy));
}
if(ans <= 30)
printf("STEP=%d",ans);
else
printf("Impossible!");
return 0;
}
结果和上面那个程序相同
最最最最后我换成了while(cin>>ch),即:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m[105],len,ans,Copy[105];
char ch;
bool check(){
for(int i = 1;i <= len / 2;i ++)
if(m[i] != m[len - i + 1])
return 1;
return 0;
}
int main(){
scanf("%d",&n);
while(cin >> ch){
if(ch != '\n')
m[++ len] = (ch >= '0' && ch <= '9') ? ch - '0':ch - 'A' + 10;
}
for(int i = 1;i <= len;i ++)
swap(m[i],m[len - i + 1]);
while(check() && ans <= 30){
ans ++;
for(int i = 1;i <= len;i ++){
Copy[i] += m[i] + m[len - i + 1];
Copy[i + 1] += Copy[i] / n;
Copy[i] %= n;
}
if(Copy[len + 1] != 0)
len ++;
for(int i = 1;i <= len;i ++)
m[i] = Copy[i];
memset(Copy,0,sizeof(Copy));
}
if(ans <= 30)
printf("STEP=%d",ans);
else
printf("Impossible!");
return 0;
}
结果就AC了?
咋回事?
有没有大佬为我解释下,谢谢。