• 全部
  • 问答

浙大1078又WA

jp1984 2004-08-21 08:59:41
以前USACO好象也没有这类的问题啊/ 。/为什么明明做的对的程序总是过不了??
#include<iostream>
#include<vector>
using namespace std;
void convert(int n,int base,vector<int>& v)
{
int r=n%base;
int q=n/base;
v.push_back(r);
while(q>0)
{
r=q%base;
q=q/base;
v.push_back(r);
}
}
bool isPalindrome(vector<int>& v)
{
int size=v.size();
int i,j=size-1;
if(size%2==0)
{
for(i=0;i<size/2;i++)
if(v[i]==v[j]&&j>=(size/2))
j--;
else break;
if(i==size/2)
return true;
else
return false;

}
else
{
for(i=0;i<(int)(size/2);i++)
if(v[i]==v[j]&&j>(int)(size/2))
j--;
else break;
if(i==j)
return true;
else return false;
}
}
void print(vector<int>& v)
{
int i;
for(i=0;i<v.size();i++)
cout<<v[i]<<" ";
cout<<endl;
}
int main()
{
int n;
vector<int> v,V;
int i;
int count=2;
while(in>>n){

for(i=2;i<17;i++)
{
convert(n,i,v);
if(isPalindrome(v))
V.push_back(i);
v.erase(v.begin(),v.end());
}
if(!V.empty())
{cout<<"Number "<<n<<" is palindrome in basis ";
print(V); }
else
{ cout<<"Number "<<n<<" is not a palindrome"; cout<<endl;}
V.erase(V.begin(),V.end());

}
return 0;
}
运行任何情况都没错啊。 但是SUMBIT就WA 。。已经遇到很多次。 。请经常ACM高手解答
...全文
174 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jp1984 2004-09-13
猪。你想死啊??? 就不给你分
回复
plpl574 2004-09-12
还不结贴啊~~~
回复
jp1984 2004-08-23
自己先顶
回复
Sahni 2004-08-23
我解决我的代码问题了,算法完全没有问题,而且很快,不过应当还可以优化.
之所以不能AC的原因很简单,就是Output Specification错了.
大家注意:
如果我输入17
它输出
Number 17 is palindrom in basis 2 4 16

但是我输入19
它则输出
Number 19 is not palindrom
大家有没有发现,少了一个'a'啊.
好阴险的题目,害的我提交了三次.

把上面代码中的这段:
if (!IsPal)
cout<<"Number "<<number<<" is not palindrom";
改成
if (!IsPal)
cout<<"Number "<<number<<" is not a palindrom";
就可以了.
回复
Sahni 2004-08-23
这是我的代码,我自己就测试了17和19两个数字,都是通过的,其他我还没有测试.
#include <iostream>
using namespace std;

typedef unsigned char int8;

bool IsPalindrom(int number, int basis)
{
int8 a[16];
int i = 0;
int j = 0;
int k;
int Len;

while (i < 16) {
if (number) {
a[i++] = number % basis;
number /= basis;
if (!number) Len = i;
continue;
}
a[i++] = 0;
}

k = Len/2;

while (j < k) {
if (a[j] != a[Len-1-j]) return false;
j++;
}
return true;
}

int main()
{
int number;
bool IsPal;
while(cin>>number) {
if (!number) break;

IsPal = false;

for (int i = 2; i <= 16; i++) {
if (IsPalindrom(number, i)) {
if(!IsPal) {
IsPal = true;
cout<<"Number "<<number<<" is palindrom in basis";
}
cout<<" "<<i;
}
}

if (!IsPal)
cout<<"Number "<<number<<" is not palindrom";

cout<<endl;
}
return 0;
}
有谁知道问题出在哪里吗?
回复
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2004-08-21 08:59
社区公告
暂无公告