16.12.2019, 08:47 [+3 UTC]
в нашей команде: 4 073 чел. | участники онлайн: 2 (рекорд: 21)

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

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

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.79 (12.12.2019)
JS-v.1.35 | CSS-v.3.36

Общие новости:
28.04.2019, 09:13

Форум:
29.11.2019, 17:59

Последний вопрос:
15.12.2019, 13:14
Всего: 151290

Последний ответ:
15.12.2019, 16:37
Всего: 259583

Последняя рассылка:
16.12.2019, 05:45

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

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

Наша кнопка:

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

Отзывы о нас:
16.05.2011, 21:31 »
nemesis
Огромное спасибо! Этого должно быть достаточно. [вопрос № 183180, ответ № 267185]
02.10.2010, 22:36 »
Светлана Гуданаева
Что бы Я без вас делала!? Огромнейшее спасибо

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

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

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

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

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 1532
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 723
Gluck
Статус: 10-й класс
Рейтинг: 462

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

Консультация онлайн # 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.14804 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.79 от 12.12.2019
Версия JS: 1.35 | Версия CSS: 3.36