Member 12781017 Ответов: 1

Как заставить эту программу работать?


Эй, ребята, мне дали программу в домашнем задании, и я попытался решить ее, но программа, которую я написал, не выполняет всю работу.

Вот программа:

Храмовая Земля

Змеи хотят построить храм для Лорда кобры. Есть несколько полос земли, на которые они смотрят, но не все из них подходят. Им нужна полоска земли, напоминающая свернувшуюся кольцом Кобру. Вам нужно выяснить, какие полосы это делают.

Формально каждая полоса земли имеет свою длину. Предположим, что длина i-й полосы равна Ni, тогда будут Ni целых чисел, Hi1, Hi2, .. HiNi, которые представляют высоты земли в различных частях полосы в последовательном порядке. То есть полоса была разделена на Ni частей и высота каждой части дана. Эта полоса действительна тогда и только тогда, когда выполняются все эти условия:

- Должна быть уникальная "центральная" часть. Именно здесь будет построен настоящий храм. Под центром мы подразумеваем, что должно быть равное количество частей слева от этой части и справа от этой части.
- Инстансов HI1 = 1
- Высота продолжает увеличиваться ровно на 1, Когда вы двигаетесь от самой левой части к центральной.
- Высота должна уменьшаться ровно на 1, Когда вы двигаетесь от центральной части к самой правой. Обратите внимание, что это означает, что Хини также должно быть 1.


Ваша задача-посмотреть на каждую полоску и выяснить, действительна она или нет.


Ввод:

- Первая строка содержит одно целое число S, которое является количеством полос, на которые вам нужно посмотреть. Ниже приводится описание каждой из полосок S
- Первая строка описания i-й полосы будет содержать одно целое число: Ni, то есть длину и количество частей, на которые она была разделена.
- Следующая строка содержит Ni целых чисел: Hi1, Hi2,.., HiNi. Они представляют собой высоты различных частей i-й полосы.


Выход:
- Для каждой полосы в новой строке выведите "да", если это допустимая полоса, и" нет", если это не так.


Ограничения:

1 ≤ S ≤ 100
3 ≤ Ni ≤ 100
1 ≤ Hij ≤ 100


Пример

Ввод:
7
5
1 2 3 2 1
7
2 3 4 5 4 3 2
5
1 2 3 4 3
5
1 3 5 3 1
7
1 2 3 4 3 2 1
4
1 2 3 2
4
1 2 2 1



Выход:
да
нет
нет
нет
да
нет
нет


Объяснение
В первой полосе выполняются все условия, следовательно, она действительна.

Во второй полосе он не начинается с 1 и, следовательно, недействителен.

В третьей полосе она продолжает увеличиваться даже за центром, вместо того чтобы уменьшаться. Следовательно, недействителен.

Четвертая полоса не увеличивается, а уменьшается ровно на 1. Следовательно, недействителен.

Пятый удовлетворяет всем условиям и, следовательно, является действительным.

Шестая и седьмая полосы не имеют "центральной" части. Потому что для каждой части есть либо больше частей справа, чем слева, либо больше частей слева, чем справа. Следовательно, обе полоски недействительны.

Что я уже пробовал:

Вот что я сделал:
#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;

void reverseStr(string &str)
{
    int n = str.length();
    for (int i=0; i<n/2; i++)
       swap(str[i], str[n-i-1]);
}


int main(){
	int num;
	cin>>num;
	if(num>=1 && num<=100){
		while(num!=0){
			int n;
			cin>>n;
			if(n>=3 && n<=100){
				string s,r="",str="";
				cin.ignore(); 
				getline(cin, s);
				if(s.at(0) == '1' && s.at(s.length()-1) == '1'){
					for(int j=0;j<s.length();j++){
						char ch = s.at(j);
						if(ch != ' '){
							r=r+ch;
						}
					}
					int len = r.length();
					if(n!=len){
						cout<<"no"<<endl;
						break;
					}
					str = r;
					reverseStr(str);
					if(r.compare(str) == 0){
						cout<<"yes"<<endl;
					}else{
						cout<<"no"<<endl;
					}
				}else{
					cout<<"no"<<endl;
				}
			}else{
				cout<<"no"<<endl;
			}
			num--;
		}
	}else{
		cout<<"no"<<endl;
	}
	return 0;
}

Но он смотрит только на цифры 0-9. Как я могу сделать эту программу также для двух цифр

1 Ответов

Рейтинг:
2

KarstenK

если вам нужно работать со строкой, представляющей двузначные числа, вы должны использовать substr функция и вы можете проверить с помощью сравнивать.

string str = "1234";
string str2 = str.substr(1,2); 
if (str2.compare("23") == 0) {
 //we found the correct sub string
}


Как видите, у струнного класса есть кое-какие вкусности под капотом. Так что это хорошая идея, чтобы прочитать документацию класса и поискать какой-нибудь пример кода.

Совет: сделайте разные выходы" нет", чтобы лучше различать случаи. Лучше всего никогда не повторять сообщения об ошибках

Удачи тебе с домашним заданием.