02.07.2020, 09:51 [+3 UTC]
в нашей команде: 4 658 чел. | участники онлайн: 3 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.89 (25.04.2020)
JS-v.1.45 | CSS-v.3.39

Общие новости:
13.04.2020, 00:02

Форум:
27.06.2020, 09:37

Последний вопрос:
02.07.2020, 06:46
Всего: 152710

Последний ответ:
01.07.2020, 15:10
Всего: 260316

Последняя рассылка:
01.07.2020, 04:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
26.09.2011, 21:33 »
lamed
Большое спасибо за помощь! С уважением. [вопрос № 184095, ответ № 268318]
03.09.2010, 17:15 »
Elektreg
гранд мерси, а я и не подумал через потокосцепление решать [вопрос № 179846, ответ № 262961]
21.09.2019, 15:29 »
dar777
Это самое лучшее решение! [вопрос № 196421, ответ № 278743]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Старший модератор
Рейтинг: 1135
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 344
solowey
Статус: Профессионал
Рейтинг: 250

Перейти к консультации №:
 

Консультация онлайн # 175300
Раздел: • С / С++
Автор вопроса: starcode
Отправлена: 15.12.2009, 19:25
Поступило ответов: 1

Доброго времени суток!
Необходимо написать программку на C++ (желательно, чтобы работала на VS 2008). Задача такая: дано натуральное n. Подсчитать количество решений неравенства x*x + y*y < n в натуральных (неотрицательных целых) числах, не используя действий с вещественными числами.
Заранее благодарен.

Состояние: Консультация закрыта

Ответ # 257777 от LfiN (Специалист)

Здравствуйте, starcode.
Комментарии в программе

#include <iostream>
using namespace std;

int main(){
	int n,x,y,k;
	locale::global(locale("russian_russia.866")); // Чтобы печатать русскими буквами
	wcout<<L"Введите число n: ";
	cin>>n;    
	k=0;
	for(x=0;x<=n;x++){
		for(y=0;y<=n;y++){
			if(x*x+y*y<n){cout<<"("<<x<<","<<y<<")\n";k++;}//если заданные координаты удовлетворяют неравенству, то выводим их на экран. Эти координаты как раз и будут решением.
		}
	}
	wcout<<L"Количество решений неравенства x*x+y*y<n в натуральных числах, не используя действий с вещественными числами:"<<k;

	wcout<<L"\nДля выхода нажмите любую клавишу...\n";
	return 0;
}


Консультировал: LfiN (Специалист)
Дата отправки: 15.12.2009, 19:51

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 175300
lupus campestris

# 1

= общий = | 15.12.2009, 20:31

LfiN:
А зачем до n перебирать-то? Можно и поменьше.

LfiN
Специалист

ID: 246813

# 2

= общий = | 15.12.2009, 20:33 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

lupus campestris:
Согласен, просто на "скорую руку" делал.

неизвестный

# 3

= общий = | 15.12.2009, 21:27

LfiN:
как же будет выглядеть финальная программа?

LfiN
Специалист

ID: 246813

# 4

= общий = | 15.12.2009, 21:49 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

starcode:
Можете смело брать программу в ответе. Она работает по принципу "чтобы наверняка" smile
Если же желаете чтобы программа выполняла меньше действий можете взять этот код↓

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

int main(){
	int n,x,y,k;
	locale::global(locale("russian_russia.866")); // Чтобы печатать русскими буквами
	wcout<<L"Введите число n: ";
	cin>>n;    
	k=0;
	for(x=0;x<=sqrt(n);x++){
		for(y=0;y<=sqrt(n);y++){
			if(x*x+y*y<n){cout<<"("<<x<<","<<y<<")\n";k++;}//если заданные координаты удовлетворяют неравенству, то выводим их на экран. Эти координаты как раз и будут решением.
		}
	}
	wcout<<L"Количество решений неравенства x*x+y*y<n в натуральных числах, не используя действий с вещественными числами:"<<k;

	wcout<<L"\nДля выхода нажмите любую клавишу...\n";
	return 0;
}

Рад был помочь!

lupus campestris

# 5

= общий = | 16.12.2009, 12:19

LfiN:
Ага, уже лучше. :)
Я бы еще подумала насчет 0 и насчет того, что там есть симметричные решения, соответственно можно в 2 раза меньше перебирать.

неизвестный

# 6

= общий = | 16.12.2009, 20:10

Если не трудно, можно пояснить, что означают значения в скобках ( , ) при выполнении программы?

LfiN
Специалист

ID: 246813

# 7

= общий = | 16.12.2009, 20:31 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

starcode:
Перед запятой в скобках записывается значение х, после запятой значение у. Если их подставить в указанное неравенство x*x+y*y<n, то оно будет выполняться.
Например, мы ввели n=2, то программа перебирает все возможные варианты начиная с нуля 0*0+0*0=0<2, потом счетчик у увеличивает значение на единицу а х остается без изменений 0*0+1*1=1<2, условие выполняется и опять увеличиваем у на единицу{это по программе написанной в ответе. в мини-форуме этот случай уже исключается} получаем 0*0+2*2=4>2 условие не выполняется. Увеличиваем счетчик х на единицу а у обнуляется, теперь неравенство имеет вид 1*1+0*0=1<2, потом счетчик у увеличивает значение на единицу а х остается без изменений 1*1+1*1=2=2 условие уже не выполняется. В итоге мы имеем (0,0),(0,1),(1,0)-это 3 решения данного неравенства при n=2.
Хотя условие задачи просит просто подсчитать количество решений, но для большей наглядности я решил вывести и сами решения.
Рад был помочь!

 

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

Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.18022 сек.

© 2001-2020, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.89 от 25.04.2020
Версия JS: 1.45 | Версия CSS: 3.39