Регистрирайте сеРегистрирайте се

Една задачка по информатика


 
   Форум за математика Форуми -> 5 клас
Предишната тема :: Следващата тема  
Автор Съобщение
dynata
Начинаещ


Регистриран на: 13 Dec 2008
Мнения: 55
Местожителство: Пловдив
Репутация: 5.7Репутация: 5.7Репутация: 5.7Репутация: 5.7Репутация: 5.7

МнениеПуснато на: 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
Репутация: 424.2Репутация: 424.2
гласове: 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 Wink

Освен това поставянето на нулите пред всички останали цифри е некоректно, така полученото число не е петцифрено, не са използвани всички цифри.
Иначе след като подредиш цифрите по големина(примерно са а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 - ще е най-голям). Оттам нататък извеждаш горната красота и си готов. Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dynata
Начинаещ


Регистриран на: 13 Dec 2008
Мнения: 55
Местожителство: Пловдив
Репутация: 5.7Репутация: 5.7Репутация: 5.7Репутация: 5.7Репутация: 5.7

МнениеПуснато на: Thu Nov 26, 2009 5:38 pm    Заглавие:

Аз днеска я реших(с помощ от 1 приятел), но все пак благодаря.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:   
   Форум за математика Форуми -> 5 клас Часовете са според зоната GMT + 2 Часа
Страница 1 от 1

 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети
Може да прикачвате файлове
Може да сваляте файлове от този форум
Copyright © 2005-2021 math10.com.