永发信息网

杭电 acm 1017

答案:3  悬赏:30  手机版
解决时间 2021-02-18 18:32
  • 提问者网友:浮克旳回音
  • 2021-02-18 03:30
下面这个代码wa了
#include<iostream>
using namespace std;
int main()
{

int zu,n,m,i=0,j=1;
cin >>zu;
while(zu--)
{
while(cin>>n>>m&&n!=0)
{
int a,b;
for(a=1;a<n-1;a++)//for (a=1,a<n-1;++a)
{
for(b=a+1;b<n;b++)// for(b=a+1;b<n;++b)
{
if(((a*a+b*b+m)%(a*b))==0)
i++;
}
}
cout<<"Case "<<j++<<": "<<i<<endl;
i=0;

}
j=0;
if (zu)
cout<<endl;
}

}
但是如果改成注释里那样就能ac 就把a++改成++a之类的,而且我验算了几组数据,两个程序都是一样的答案? 这是为什么啊? for(a=1;a<n-1;a++)//for (a=1,a<n-1;++a)这两个有什么不一样吗? 谢谢了
最佳答案
  • 五星知识达人网友:轻雾山林
  • 2021-02-18 05:02
跟a和b无关,两个循环没有差别,不改也一样,重点是j=0和++j
对应的三句:
int zu,n,m,i=0,j=1;
cout<<"Case "<<j++<<": "<<i<<endl;
j=0;
这里三句必须相互匹配,你之前WA是因为第一次声明是j=1,用完后再初始化的时候就变成j=0了。
所以只能是下面两种写法:
int zu,n,m,i=0,j=1;
cout<<"Case "<<j++<<": "<<i<<endl;
j=1;
或者:
int zu,n,m,i=0,j=0;
cout<<"Case "<<++j<<": "<<i<<endl;
j=0;
重新初始化必须跟最初的一致。
全部回答
  • 1楼网友:长青诗
  • 2021-02-18 07:39
它有多组测试数据,你这样写只能测试一组就结束了,当然要错了。应该这样写 #include using namespace std; int main() { int a, b, c; while(cin >> a >> b) //直到文件的结尾为止 { c = a + b; cout << c << endl; } return 0; }
  • 2楼网友:蓝房子
  • 2021-02-18 06:06
a++ 和 ++a的区别在于,a++是先进行其它操作后在自增,cout《《j++ 就是先输出j再自增
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯