昨天代码:
#include<iostream>
using namespace std;
string ipt,a;
int n;
string Turn(string a)/整个函数都有问题
{
string x;
int t=0;
for(int i=a.size()-1;i>=0;i--)
{
x[t++]=a[i];
}
return x;
}
bool pld(string a)
{
if(a.size()%2)//
for(int i=0;i<a.size()/2;i++)
{
if(a[i]!=a[a.size()-i]) return false;
}
else
for(int i=0;i<a.size()/2;i++)
{
if(a[i]!=a[a.size()-i-1]) return false;
}
return true;
}
string Plus(int n,string a,string b)
{
bool c=0;
string ans;
for(int i=0;i<a.size();i++)
{
int x,y;
if(a[i]>='A'&&a[i]<='F') x=(int)(a[i]-55);
else x=(int)(a[i]-48);
if(b[i]>='A'&&b[i]<='F') y=(int)(b[i]-55);
else y=(int)(a[i]-48);
int p;
if(c) p++;
if(x+y<n) p=x+y,c=0;//
else p=x+y-n,c=1;//
if(p>9) ans+=(char)(p+55);
else ans+=(char)(p+48);
}
//
return Turn(ans);
}
int main()
{
cin>>n>>ipt;
a=ipt;
for(int i=1;i<=30;i++)
{
a=Plus(n,a,Turn(a));
if(pld(a))
{
cout<<"STEP="<<i<<endl;
return 0;
}
}
cout<<"Impossible!\n";
return 0;
}
行末有两个斜杠的,说明那一行代码有问题
其实,我的思路完全正确。但之所以没有AC,是因为没有考虑到所有情况。
AC代码贴一下
#include<iostream>
using namespace std;
string ipt,a;
int n;
string Turn(string a)
{
string x;
for(int i=a.size()-1;i>=0;i--) x+=a[i];
return x;
}
bool pld(string a)
{
if(!a.size()%2)
for(int i=0;i<a.size()/2;i++)
{
if(a[i]!=a[a.size()-i]) return false;
}
else
for(int i=0;i<a.size()/2;i++)
{
if(a[i]!=a[a.size()-i-1]) return false;
}
return true;
}
string Plus(int n,string a,string b)
{
bool c=0;
string ans;
for(int i=0;i<a.size();i++)
{
int x,y;
if(a[i]>='A'&&a[i]<='F') x=(int)(a[i]-55);
else x=(int)(a[i]-48);
if(b[i]>='A'&&b[i]<='F') y=(int)(b[i]-55);
else y=(int)(b[i]-48);
int p=0;
if(c) p++;
if(x+y+p<n) p+=x+y,c=0;
else p+=x+y-n,c=1;
if(p>9) ans+=(char)(p+55);
else ans+=(char)(p+48);
}
if(c) ans+='1';
return Turn(ans);
}
int main()
{
cin>>n>>ipt;
a=ipt;
for(int i=1;i<=30;i++)
{
a=Plus(n,a,Turn(a));
if(pld(a))
{
cout<<"STEP="<<i<<endl;
return 0;
}
}
cout<<"Impossible!\n";
return 0;
}
/*
2 10011
STEP=4
*/
另外提醒,提交时记得删掉调试语句!