Prateek Krishna Ответов: 2

Почему код показывает различное поведение при изменении порядка входных данных.


You are given a string S. Your task is to determine if sum of ASCII values of all character results in a perfect square or not.
INPUTS ARE:
1) 2
MKNKEWIILKVRCNNWOGBVXKXRWRSDUOVJBLWFIFOWRMOUDFRRLVPLINEFIYIFNGORTLYFSPCLFSGIXACLVRXFHEMPDVUTEMLYAKETBIFIDNQCNUPMMNTTRGMXCJRHVFIWPOSSWABANTEDOURDKLAFSMDUVUEUAORRDKNCKQFAL
d

2) 2
d
MKNKEWIILKVRCNNWOGBVXKXRWRSDUOVJBLWFIFOWRMOUDFRRLVPLINEFIYIFNGORTLYFSPCLFSGIXACLVRXFHEMPDVUTEMLYAKETBIFIDNQCNUPMMNTTRGMXCJRHVFIWPOSSWABANTEDOURDKLAFSMDUVUEUAORRDKNCKQFAL


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

#include <bits/stdc++.h>
using namespace std;

int ischeck(int n)
{
    int z=sqrt(n);
    return ((z*z)==n);
}

int main() {
	int t;
	cin>>t;
	while(t--)
	{
	    string s;
	    cin.ignore();
	    getline(cin,s);
	    int i,sum=0;
	    for(i=0;i<s.length();i++)
	    sum+=int(s[i]);
	    if(ischeck(sum))
	    cout<<"1"<<endl;
	    else
	    cout<<"0"<<endl;
	}
	return 0;
}

Richard MacCutchan

В чем же вопрос?

Prateek Krishna

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

Ввод:
Первая строка входных данных содержит одно целое число T, обозначающее количество тестовых случаев. Затем следуют T тестовых случаев. Каждого теста есть строка s

Выход:
Выведите 1, Если полученная сумма является идеальным квадратом, иначе выведите 0.

Ограничения:
1<=T<=100
1<=|S|<=1000

Richard MacCutchan

Прекрасно, но что же это такое твой вопрос?

Prateek Krishna

когда я ввел входные данные
2
д
дддд
его выход равен 1 0.
но когда я ввел ввод как
2
дддд
д
выход равен 1 1.
почему это происходит?

Richard MacCutchan

Без понятия. Но вы можете начать с печати значений, которые вы вычисляете как сумму, а также квадратный корень. Скорее всего, использование целочисленных значений означает, что вы не получите точных результатов для некоторых чисел, так как квадратные корни многих чисел не являются точными целыми числами.

2 Ответов

Рейтинг:
1

CPallini

Вы ignoreИнг слишком много.

include <iostream>
#include <cmath>
using namespace std;

int ischeck(int n)
{
  int z=sqrt(n);
  return ((z*z)==n);
}

int main()
{
  int t;
  cin>>t;
  cin.ignore();
  while(t--)
  {
    string s;
    getline(cin,s);
    size_t sum=0;
    for(size_t i=0; i<s.length(); i++)
      sum += int(s[i]);
    cout << ischeck(sum) << endl;
  }
  return 0;
}


Рейтинг:
0

Patrice T

Совет: выведите и сумму тоже.

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

#include <bits/stdc++.h>
using namespace std;

int ischeck(int n)
{
    int z=sqrt(n);
    return ((z*z)==n);
}

int main() {
    int t;
    cin>>t;
    while(t--)
    {
        string s;
        cin.ignore();
        getline(cin,s);
        int i,sum=0;
        for(i=0;i<s.length();i++)
            sum+=int(s[i]);
        if(ischeck(sum))
            cout<<"1"<<endl;
        else
            cout<<"0"<<endl;
    }
    return 0;
}

Стиль отступа - Википедия[^]

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]

Цитата:
Почему код показывает различное поведение при изменении порядка входных данных.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.