为什么这个代码在ubuntu上运行得很好,而在Windows8上运行得不好
Why this code runs well on ubuntu and not in Windows 8?
昨天在coci(克罗地亚公开信息竞赛)期间,我的第一项任务出现了问题,要求我从给定的密码列表中找到正确的密码正确的密码是可以在列表中以原始和反向顺序找到的密码。例如,如果单词"tulipan"是正确的密码,那么单词"napilut"也必须出现在列表中。
第一行输入包含整数N(1≤N≤100),即可能的密码数。以下N行中的每一行包含一个字,其长度为大于2且小于14的奇数。
输出的第一行也是唯一一行必须包含正确密码的长度及其中心字母。解决方案将是独一无二的。
So ex
input
4
las
god
psala
sal
output
3 a
也可以有一个回文单词ex:kisik,这将是正确的密码。
我的解决方案是以下代码
#include <iostream>
#include <string>
using namespace std;
int main()
{
int N,i,k,j,x,w;
cin >>N;
int lung[N];
string S1[N];
string S2[N];
bool trovata=false;
for(i=0; i<N; i++)
{
cin >> S1[i];
for(k=0; S1[i][k]!=' '; k++);
for(j=0; j<k; j++)
{
S2[i][k-j-1]=S1[i][j];
}
S2[i][k]=' ';
lung[i]=k;
int conta=0;
for(j=0; j<k; j++)
{
if (S1[i][j]==S2[i][j]) conta++;
}
if(conta==k)
{
x=(k/2);
cout <<k<<" "<<S2[i][x];
trovata=true;
break;
}
}
if(trovata==false)
{
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
if(i!=j)
{
int conta=0;
if(lung[i]==lung[j])
{
for(w=0; w<lung[i]; w++)
{
if (S1[i][w]==S2[j][w]) conta++;
}
if(conta==lung[i])
{
x=(lung[i]/2);
cout <<lung[i]<<" "<<S2[i][x];
break;
}
}
}
}
}
}
return 0;
}
我在Windows 8上用CodeBlocks 13.12编译它,输出被写了两次(在第一个示例中,我的输出是"3 a3 a"而不是"3 a"),但当我在Ubuntu上运行的C::B上编译它时,它给了我正确的输出。这个代码出了什么问题?
代码对于它需要做的事情来说过于复杂,因为已经说过,如果它不是回文,你的代码会找到匹配的单词两次,因此会打印两次。您应该在找到第一个匹配项时停止搜索。中断只会中断内环,外环会继续,它也会找到相反的结果。
您没有在S2数组中为字符串保留空间。因此,S2[i][k-j-1]=S1[i][j];
是UB,打印出的任何正确(或不正确!)答案都是运气使然。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 为什么是谷神星协方差.计算()似乎永远运行而不返回?
- 为什么在引用指针时将 const 放在 & 符号的左侧有效,而在右侧则无效?
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 为什么我们需要在 C++ 中检查空指针,而在 Java 中不需要?
- 为什么 'std::reference_wrapper' 在 c++17 中被弃用,而在 c++20 中被删除?
- 在for循环的某些迭代中,字符串的长度为0,而在其他迭代中则不为0
- 为什么带lcov的codecov在Travis上不能正常工作,而在我当地的Linux Mint上却不能正常工作
- 为什么在一个地方需要双倍英镑,而在这个宏观上不需要其他地方?
- 为什么我的C 代码在Linux上运行,而在Windows上不运行,是否有RAM内存的问题
- 为什么这个代码在ubuntu上运行得很好,而在Windows8上运行得不好
- 如何在选择错误选项时保持程序运行而不退出
- 使用 Visual Studio,为什么C++程序无法在调试模式下运行,而在发布模式下成功运行
- 在 中执行行命令C++运行而不返回预期结果
- 为什么我在某些计算机上运行Makefile时会出现“未定义引用”错误,而在其他计算机上却没有
- 在某些运行中出现Seg错误,而在其他运行中没有(使用相同的输入文件)
- 定义要在全局范围内运行而不发出警告的宏
- 为什么sizeof在linux上运行良好,而在windows上遇到运行错误
- 为什么这个c++程序在多个文件上通过命令提示符运行时会崩溃,而在单个文件上运行时却不会