我解决了确定数组对称性的问题,或者换句话说,它是否是一个多项式。如果是对称的,那么我输出1,否则输出0。首先在文件中输入数组元素的个数,然后只有一个数字序列。
问题是没有办法正确检查文件是否为空。如果文件完全为空,则输出 0。
我已经使用了两者if(!(fin >> number)) fout << 0;
和if(fin.tellg() == 0)
其他。
但在这种情况下,答案是不正确的。即使我在文件中输入了对称的数字序列,它也会输出 0。
建议点别的。
#include <iostream>
#include <fstream>
using namespace std;
bool symmetry(int array[], int begin, int end){
{
return (begin >= end) || ((array[begin] == array[end]) && (symmetry(array, begin + 1, end - 1)));
}
return 0;
}
int main(){
ifstream fin("input.txt");
ofstream fout("output.txt");
int number, count = 0, size, a = 0;
if(!(fin >> number)) {fout << 0; return 0;} //проверка на пустоту
while(fin >> number){a++;}
fin.clear();
fin.seekg(0, ios::beg);
fin >> number;
size = number;
int array[size];
if (size == 0){fout << 0; return 0;}
if(size <= (a-1)){
for(int i = 0; i < size; i++) {fin >> number; array[count++] = number;}
}
else{
for(int i = 0; i < a-1; i++) {fin >> number; array[count++] = number;}
}
for(int i = 0; i < count; i++){cout << array[i];}
if(symmetry(array, 0, count-1) == true) fout<< 1;
else fout<< 0;
fin.close();
fout.close();
return 0;
}
通过检查空
if(!(fin >> number))
是对空的有效检查。但是发生错误的原因完全不同:循环for(int i = 0; i < a-1; i++) {fin >> number; array[count++] = number;}
应该包含 noti < a-1
,但是i < a
。由于需要最多计数 a-1 个元素(包括)。因此,1 个未读元素解除了数组的对称性,并且 0 被赋予了文件,否则。