Регистрирайте се
Една задачка по информатика
|
| Предишната тема :: Следващата тема |
| Автор |
Съобщение |
dynata Начинаещ

Регистриран на: 13 Dec 2008 Мнения: 55 Местожителство: Пловдив
     
|
Пуснато на: Wed Nov 25, 2009 9:09 pm Заглавие: Една задачка по информатика |
|
|
Задача E1. Числа
По време на дългите учебни часове нашият приятел Умко от училището в село Каръшко, което в наша чест е наречено “Програмистите на България”, се забавлявал като измислял различни игри с числа. Случайно забелязал, че от едно петцифрено число, чрез разместване на цифрите му, могат да се получат много различни числа и дори ги преброил. Те били 120. Все пак написването им било досадна работа, дори когато ти е скучно в час. Умко решил, че не го интересуват всички тези числа, а само най-малкото и най-голямото от тях. Той започнал да разглежда различни петцифрени числа и за всяко от тях да намира разликата между най-голямото и най-малкото число, получени от неговите цифри. Скоро и тази работа му омръзнала, но все пак искал на всяка цена да знае тази разлика за всяко едно петцифрено число.
Сега вече само вие можете да му помогнете като напишете програма NUMBERS.EXE, която въвежда от клавиатурата на компютъра цяло петцифрено число N и извежда на екрана разликата между най-малкото и най-голямото измежду числата, получени като се разместят цифрите на N.
Примерен вход:
56342
Примерен изход:
41976
Обяснение:
Най-голямото число, което се получава от цифрите 2, 3, 4, 5 и 6 на числото 56342, е 65432, най-малкото е 23456, а разликата на тези две числа е точно 41976.
Примерен вход:
10002
Примерен изход:
19989
Обяснение:
Най-голямото число, което се получава от цифрите 1, 0, 0, 0 и 2 на числото 10002, е 20001, най-малкото е 12, а разликата на тези две числа е точно 19989.
Къде ми е грешката:
#include <iostream>
using namespace std;
int main ()
{
int N,dh,h,s,d,e,min,dh1,h1,s1,d1,e1,max,dh2,h2,s2,d2,e2,otg;
cin>>N;
dh=N/10000;
h=N/1000%10;
s=N/100%10;
d=N/10%10;
e=N%10;
if(dh>h)h=dh;
if(dh>s)s=dh;
if(dh>d)d=dh;
if(dh>e)e=dh;
if(h>s)s=h;
if(h>d)d=h;
if(h>e)e=h;
if(s>d)d=s;
if(s>e)e=s;
if(d>e)e=d;
dh1==dh;
h1==h;
s1==s;
d1==d;
e1==e;
dh1=min/10000;
h1=min/1000%10;
s1=min/100%10;
d1=min/10%10;
e1=min%10;
min=dh1*10000+h1*1000+s1*100+d1*10+e1;
if(dh<h)h=dh;
if(dh<s)s=dh;
if(dh<d)d=dh;
if(dh<e)e=dh;
if(h<s)s=h;
if(h<d)d=h;
if(h<e)e=h;
if(s<d)d=s;
if(s<e)e=s;
if(d<e)e=d;
dh2==dh;
h2==h;
s2==s;
d2==d;
e2==e;
dh2=max/10000;
h2=max/1000%10;
s2=max/100%10;
d2=max/10%10;
e2=max%10;
max=dh2*10000+h2*1000+s2*100+d2*10+e2;
otg=max-min;
cout<<otg<<endl;
system ("pause");
return 0;
}
ПП:правя нова тема, защото в миналата беше много наблъскано. |
|
| Върнете се в началото |
|
 |
Реклама
|
Пуснато на: Заглавие: Реклама |
|
|
|
|
|
| Върнете се в началото |
|
 |
martosss VIP Gold

Регистриран на: 17 Mar 2007 Мнения: 3937 Местожителство: Somewhere over the rainbow
   гласове: 213
|
Пуснато на: Thu Nov 26, 2009 9:40 am Заглавие: Re: Една задачка по информатика |
|
|
| dynata написа: | Примерен вход:
10002
Примерен изход:
19989
Обяснение:
Най-голямото число, което се получава от цифрите 1, 0, 0, 0 и 2 на числото 10002, е 20001, най-малкото е 12, а разликата на тези две числа е точно 19989. |
Аз не знам тия как са смятали, но на мен 21 000 ми изглежда по-голямо от 20 001
Освен това поставянето на нулите пред всички останали цифри е некоректно, така полученото число не е петцифрено, не са използвани всички цифри.
Иначе след като подредиш цифрите по големина(примерно са а1≥а2≥а3≥а4≥а5), то разликата по техния начин(тоест нулите могат да стоят на първо място) е
(a1-a5)*10 000+(a2-a4)*1000+(a4-a2)*10+a5-a1
Вече ако не могат работата става друга.
А самото подреждане на числата може да го направиш по-лесничко - с два вложени цикъла:
Нека числата са ти а0, а1, а2, а3, а4. Тогава
[code]
int swap;
for(int i=0;i<4;i++)
{for(int j=i+1;j<5;j++)
{if(a[i]<a[j])
{swap=a[i];
a[i]=a[j];
a[j]=swap;
}
}
}
След изпълнение на горното(метод на пряката селекция се казваше май) ще подредиш елементите в низходящ ред(тоест първият - а0 - ще е най-голям). Оттам нататък извеждаш горната красота и си готов.  |
|
| Върнете се в началото |
|
 |
dynata Начинаещ

Регистриран на: 13 Dec 2008 Мнения: 55 Местожителство: Пловдив
     
|
Пуснато на: Thu Nov 26, 2009 5:38 pm Заглавие: |
|
|
| Аз днеска я реших(с помощ от 1 приятел), но все пак благодаря. |
|
| Върнете се в началото |
|
 |
|
|
Не Можете да пускате нови теми Не Можете да отговаряте на темите Не Можете да променяте съобщенията си Не Можете да изтривате съобщенията си Не Можете да гласувате в анкети Може да прикачвате файлове Може да сваляте файлове от този форум
|
|