Някой с C++ програмиране?
Някой с C++ програмиране?
Здравейте колеги,
Имам курсова задача от университета, на която сериозно съм забил. Дисциплината се казва: Проектиране и анализ на алгоритми към Русенския университет(ако някой го е завършил).
Курсовата задача е както следва:
[i]Всички естествени числа със сума на цифрите S са подредени в растящ ред. Така например при S=3 се получава редицата 3, 12, 21, 30, 102, 111, 120, 201, 210, 300, ... . Напишете програма на C++, която по зададени S и N, намира N-тия член на тази редица.
Вход: Естествено число S(сумата) и N(номер на член от редицата).
Изход: Едно число - търсеният Nти член.
Пример:
Вход: S=3,N=5
Изход: 102[/i]
Представям си го като някаква функция, която взима сумата и създава масив с числата. После се извежда числото, записано в променлива N като брой на елемент от масива. Обаче не знам как да го напиша това.
Срока ми е до 29 ноември. Ако някой може да помогне, ще почерпя разумно. Благодаря предварително на отзовалите се.
Имам курсова задача от университета, на която сериозно съм забил. Дисциплината се казва: Проектиране и анализ на алгоритми към Русенския университет(ако някой го е завършил).
Курсовата задача е както следва:
[i]Всички естествени числа със сума на цифрите S са подредени в растящ ред. Така например при S=3 се получава редицата 3, 12, 21, 30, 102, 111, 120, 201, 210, 300, ... . Напишете програма на C++, която по зададени S и N, намира N-тия член на тази редица.
Вход: Естествено число S(сумата) и N(номер на член от редицата).
Изход: Едно число - търсеният Nти член.
Пример:
Вход: S=3,N=5
Изход: 102[/i]
Представям си го като някаква функция, която взима сумата и създава масив с числата. После се извежда числото, записано в променлива N като брой на елемент от масива. Обаче не знам как да го напиша това.
Срока ми е до 29 ноември. Ако някой може да помогне, ще почерпя разумно. Благодаря предварително на отзовалите се.
Re: Някой с C++ програмиране?
[Quote]Всички естествени числа със сума на цифрите S са подредени в растящ ред. [/Quote]
Какво имаш предвид?
Какво имаш предвид?
Re: Някой с C++ програмиране?
ето ти го на С, преправи си го за C++
[Quote]#include
unsigned int sum(unsigned int num) {
unsigned int r, sum = 0;
while (num > 0) {
r = num % 10;
sum = sum + r;
num /= 10;
}
return sum;
}
int find(unsigned int S, unsigned int N) {
int i = 0, cnt = 0;
while (1) {
if (sum(++i) == S) {
if (++cnt == N)
return i;
}
}
}
int main() {
printf("find: %i\n", find(3, 5));
}[/Quote]
[Quote]#include
unsigned int sum(unsigned int num) {
unsigned int r, sum = 0;
while (num > 0) {
r = num % 10;
sum = sum + r;
num /= 10;
}
return sum;
}
int find(unsigned int S, unsigned int N) {
int i = 0, cnt = 0;
while (1) {
if (sum(++i) == S) {
if (++cnt == N)
return i;
}
}
}
int main() {
printf("find: %i\n", find(3, 5));
}[/Quote]
Re: Re: Някой с C++ програмиране?
-
Последна промяна от npet на 21 юли 2020, 10:36, променено общо 1 път.
-
Re: Re: Някой с C++ програмиране?
За примера S=3. Първото число винаги е S. После са написани числа, чиито цифрички сумирани дават 3 и са подредени във възходящ ред.
3, 12, 21, 30, 102, 111, 120, 201, 210, 300...
3
12=1+2=3
21=2+1=3
30=3+0=3
102=1+0+2=3
111=1+1+1=3
и т.н. Мисля че ще разбереш.
3, 12, 21, 30, 102, 111, 120, 201, 210, 300...
3
12=1+2=3
21=2+1=3
30=3+0=3
102=1+0+2=3
111=1+1+1=3
и т.н. Мисля че ще разбереш.
Re: Re: Re: Някой с C++ програмиране?
Колега, загубих си 3-4 минути от живота за да ти реша задачата, няма ли поне едно мерси да кажеш? :)
Re: Re: Re: Re: Някой с C++ програмиране?
Здравей колега,
Благодаря ти. Все още се опитвам да я разбера, но изглежда правилно.
Ако искаш дай банкова сметка на лично съобщение, за да ти пратя нещо. :)
Благодаря ти. Все още се опитвам да я разбера, но изглежда правилно.
Ако искаш дай банкова сметка на лично съобщение, за да ти пратя нещо. :)
Re: Re: Re: Re: Re: Някой с C++ програмиране?
[Quote]Все още се опитвам да я разбера[/Quote]
Аз програмиране не съм пипал дето се вика от малък, но мисля, че разбирам как работи програмката на колегата и мога да пробвам да ти обясня.
Програмката има две функция. На едната sum() подаваш число и тя ти връща сбота на цифрите му. Другата е find(), на която подаваш каква сума от цифри да търси и кое поредно отговарящо число да ти върне.
Как работи sum()
Прави се цикъл. А num e подаденото число.
r = num % 10 - в r се запива остатъка от деленето на num на 10. Тоест маха десетиците и взима само последната цифра. Ако num е 112, r ще е равно на 2.
В променливата sum се добавя намереното r.
num/=10 дели подаденото числото на 10. С което отпада последната цифра от числото. 112 делено на 10 е 11,2 , но понеже променливата е целочислена и там закръгляването винаги е надолу, num става равно на 11 и отново се подава в началото. Въртейки цикъла се намира сбора от всички цифри.
Функцията find(), прави се цикъл, променливата i се използва за подаване на числата подред(1,2,3,4...)
if (sum(++i) == S) - тук i се вдига с единица и се подвава на функцията sum(), от където се връща сбора на цифрите и се проверява дали съвпада с търсения S. Ако съвпада,
if (++cnt == N) - брояча cnt се вдига с единица и се проверява дали това е търсеното подред съвпадение N. Ако да, се извежда търсеното число i. Ако не, цикъла се върти отново със следващото подред число. Така реално всички числа от 1 до х се подават докато не се стигне до търсеното.
В случая програмата работи с фиксирани входящи числа от твоя пример, като може леко да го преправиш да се подават от потребителя.
Надявам се, че правилно разбирам кода и съм помогнал и ти да го разбереш. Ако нещо не е така, ме поправете.
Аз програмиране не съм пипал дето се вика от малък, но мисля, че разбирам как работи програмката на колегата и мога да пробвам да ти обясня.
Програмката има две функция. На едната sum() подаваш число и тя ти връща сбота на цифрите му. Другата е find(), на която подаваш каква сума от цифри да търси и кое поредно отговарящо число да ти върне.
Как работи sum()
Прави се цикъл. А num e подаденото число.
r = num % 10 - в r се запива остатъка от деленето на num на 10. Тоест маха десетиците и взима само последната цифра. Ако num е 112, r ще е равно на 2.
В променливата sum се добавя намереното r.
num/=10 дели подаденото числото на 10. С което отпада последната цифра от числото. 112 делено на 10 е 11,2 , но понеже променливата е целочислена и там закръгляването винаги е надолу, num става равно на 11 и отново се подава в началото. Въртейки цикъла се намира сбора от всички цифри.
Функцията find(), прави се цикъл, променливата i се използва за подаване на числата подред(1,2,3,4...)
if (sum(++i) == S) - тук i се вдига с единица и се подвава на функцията sum(), от където се връща сбора на цифрите и се проверява дали съвпада с търсения S. Ако съвпада,
if (++cnt == N) - брояча cnt се вдига с единица и се проверява дали това е търсеното подред съвпадение N. Ако да, се извежда търсеното число i. Ако не, цикъла се върти отново със следващото подред число. Така реално всички числа от 1 до х се подават докато не се стигне до търсеното.
В случая програмата работи с фиксирани входящи числа от твоя пример, като може леко да го преправиш да се подават от потребителя.
Надявам се, че правилно разбирам кода и съм помогнал и ти да го разбереш. Ако нещо не е така, ме поправете.
Re: Re: Някой с C++ програмиране?
Пиша това мнение с риск да прозвучи като хейт.
1. Горната програма е нагледен пример защо съвременните телефони са с 8 ядра, 8 GB RAM и пак не работят като хората, за разлика от компютри с дискета 360KB и 64KB RAM.
2. Интересно какво ще се случи с горната програма ако и се зададе да търси 20-тото число със сума от цифрите 1.
Ама така е - едно време четяхме "Искусство программирования" на Кнут на руски (просто нямаше от къде да се вземе оригинала) сега се чете "C ++ for Dummies"
1. Горната програма е нагледен пример защо съвременните телефони са с 8 ядра, 8 GB RAM и пак не работят като хората, за разлика от компютри с дискета 360KB и 64KB RAM.
2. Интересно какво ще се случи с горната програма ако и се зададе да търси 20-тото число със сума от цифрите 1.
Ама така е - едно време четяхме "Искусство программирования" на Кнут на руски (просто нямаше от къде да се вземе оригинала) сега се чете "C ++ for Dummies"
Re: Re: Re: Някой с C++ програмиране?
1. Вярвам, че правиш разлика между CPU и RAM, защото въпросното решение може да ползва много CPU в определени случаи, но ще работи и на компютър с 64KB RAM :)
2. Приемам забележката, мога да дам и бързо рекурсивно решение, но не мисля че колегата ще го разбере на този етап, щом му е трудно да напише/разбере простото решение.
2. Приемам забележката, мога да дам и бързо рекурсивно решение, но не мисля че колегата ще го разбере на този етап, щом му е трудно да напише/разбере простото решение.