开心地刷着HDU的一道DP题,写好后提交,WA,擦。。。搞毛啊,,看着解题报告(这份解题报告的答案是对的)敲都错,,,对比下解题报告,,发现我在一个地方犯了错,而这个地方让我纠结了1个多小时才想明白是这么回事。
具体杭电的哪题就不说了,把问题压缩下吧。
问题:输出一个4*4的矩阵,每个元素都是1,例外是第一个元素要用空格代替,例如输出下面这样
1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
看了问题后,哇塞!真简单!
马上敲好代码,如下:
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (i != 0 && j != 0)
cout << "1";
else
cout << " ";
cout << " ";
}
cout << endl;
}
运行后如下图:
靠!怎么会这样!!!
是不是电脑中毒??
难道VS中毒了?
都不是,是我脑子秀逗了。
好吧,现在来看一下正确的代码:
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (i == 0 && j == 0)
cout << " ";
else
cout << "1";
cout << " ";
}
cout << endl;
}
输出如下图:
perfect!
来看下正确代码,输出的时候,第一个“1”单独处理变成空格嘛,其他的输出1,对啊,就是这样啊。
我的代码不也是嘛,,来看看:
if (i != 0 && j != 0)//处理其他
cout << "1";
else//处理第一个
cout << " ";
也是这样的啊!!!
OK,想到错在哪里了么?看下错误的代码的输出图就知道了,第一行和第一列都变成空格了。i != 0 && j != 0会把第一行和第一列都忽视,而不仅仅是第一个。
其实这个错误就是一个简单的逻辑错误,我的代码只需改动两个字符就可以了。
把&&改成||即可。
也就是:
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (i != 0 || j != 0)//----------->改动位置
cout << "1";
else
cout << " ";
cout << " ";
}
cout << endl;
}
OK,结束了,心好累 想想自己也真是秀逗到家了。。。。。
写于此,于己,吃一堑长一智;于他,。。。。。你看了应该就不会犯了。