Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2012, 23:56   #1
s2dentishe
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 70
По умолчанию

Есть такое задание: есть четырехзначное число. его цифры различны друг от друга и не равны нулю. Если записать такое число в обратном порядке, то получим число на К меньшее исходного. Найти это число.
Поясните пожалуйста задание . Дело в том что не для каждого К найдется такое число. Или здесь всё намного проще и нужно просто в тупую представить запись числа в обратном порядке?

Ребята, посодействуйте пожалуйста. Дело в том, что при заданном "К" не каждого будет такое число. А если это число не брать во внимание,т.е. перебирать все возможные "К", то Чисел таких много. Кто как понимает это задание?
Код программы ниже

Код:
function kol(st:string):Boolean;
Var
   i,
   n:integer;
   st_pr:string;
begin
for i:=1 to length(st) do
 begin
  st_pr:=st;
  n:=0;
  While pos(st[i],st_pr)<>0 do
   begin
   inc(n);
   Delete(st_pr,1,Pos(st[i], st_pr));
   end;

  if n>1 then
   begin
   kol:=false;
   break;
   end
  else kol:=true;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var
   a_st:string[4];
   a_st_inv:string;
   a,k:integer;
begin
  k:=StrToInt(Edit1.text);
 for a:=1111 to 9999 do
 begin
 a_st:=IntToStr(a);
 if (a_st[1]<>'0') and (a_st[2]<>'0') and (a_st[3]<>'0') and (a_st[4]<>'0') then
  if kol(a_st) then
   begin
   a_st_inv:=a_st[4]+a_st[3]+a_st[2]+a_st[1];
   if StrToInt(a_st)=k+StrToInt(a_st_inv) then
    ListBox1.Items.Add(a_st);
   end;
  ProgressBar1.Position:=a;
 end;
end;
- это при заданном К

если же К берем произвольное, то
1.функция та же "kol"
2.убираем К
3. меняем условие в обработчике события Button1Click
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
   a_st:string[4];
   a_st_inv:string;
   a:integer;
begin
 for a:=1111 to 9999 do
 begin
 a_st:=IntToStr(a);
 if (a_st[1]<>'0') and (a_st[2]<>'0') and (a_st[3]<>'0') and (a_st[4]<>'0') then
  if kol(a_st) then
   begin
   a_st_inv:=a_st[4]+a_st[3]+a_st[2]+a_st[1];
   if StrToInt(a_st)>StrToInt(a_st_inv) then
    ListBox1.Items.Add(a_st);
   end;
  ProgressBar1.Position:=a;
 end;
end;

Последний раз редактировалось Stilet; 24.11.2012 в 17:18.
s2dentishe вне форума Ответить с цитированием
Старый 24.11.2012, 16:24   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Скорее всего, K будет дано (т.е. Вам зададут K - нужно найти подходящее число или сказать, что таких нет).
Кстати, не увидел проверки того, что все цифры различны.

Update Извините, ошибся - проверка есть.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 24.11.2012 в 16:43.
BDA на форуме Ответить с цитированием
Старый 24.11.2012, 18:22   #3
gaw4
Форумчанин
 
Регистрация: 31.05.2010
Сообщений: 407
По умолчанию

вариант (АВС)
Код:
uses crt;
var a, a1,k,i:integer;

function nul(b:integer):boolean;
begin
      nul:=false;
         while b>0 do begin
           if (b mod 10)=0 then begin
              nul:=true;break;
           end;
           b:=(b div 10);
         end;
end;

function a2(b:integer):integer;
var b1:integer;
begin
    b1:=0;
     while b>0 do begin
     b1:=b1*10+(b mod 10);
     b:=b div 10;
     end;
result:=b1;
end;
begin
    {writeln('K-?');
    read(k); }

    k:=5265;

for i:=1111 to 9999 do begin
    if nul(i)=false then  begin
//writeln(i);
       if a2(i)+k =i then  begin
          a1:=i;//break;
          write(a1,'  '); write(k,'  ');writeln(a2(a1))
       end;
    end;
end;
if a1=0 then  writeln('Not')
end.
icq 584 308 611
gaw4 вне форума Ответить с цитированием
Старый 25.11.2012, 02:23   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

iomho, K в задаче должно задаваться, а программа должна сообщить решение, если оно есть или выдать сообщение о том, что таких чисел нет.


господа, а так не проще?
Код:
found := false;
for d1:=1 to 9 do
  for d2:=1 to 9 do
    for d3:=1 to 9 do
       for d4:=1 to 9 do
          if (d1<>d2) and (d1<>d3) and (d1<>d4) 
                              and (d2<>d3) and (d2<>d4) and (d3<>d4) then
        if  (d1*1000+d2*100+d3*10+d4) -  
                 (d4*1000+d3*100+d2*10+d1) = K then begin
                        WriteLn(d1,d2,d3,d4);
                         found := true;
         end;

if Not found then WriteLn('Таких чисел не найдено!');
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2012, 03:26   #5
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Serge_Bliznykov, да, всё гениальное просто!..

Испытал (дополнив циклом по k = 1 to 9000); и вот несколько (последние 100 из 1512) решений:
Код:
8791 при k = 6813 [1413]	9132 при k = 6813 [1414]	9352 при k = 6813 [1415]
9462 при k = 6813 [1416]	9572 при k = 6813 [1417]	9682 при k = 6813 [1418]	8231 при k = 6903 [1419]	8341 при k = 6903 [1420]
8451 при k = 6903 [1421]	8561 при k = 6903 [1422]	8671 при k = 6903 [1423]	9342 при k = 6903 [1424]	9452 при k = 6903 [1425]
9562 при k = 6903 [1426]	9672 при k = 6903 [1427]	9782 при k = 6903 [1428]	8321 при k = 7083 [1429]	8431 при k = 7083 [1430]
8541 при k = 7083 [1431]	8651 при k = 7083 [1432]	8761 при k = 7083 [1433]	9432 при k = 7083 [1434]	9542 при k = 7083 [1435]
9652 при k = 7083 [1436]	9762 при k = 7083 [1437]	9872 при k = 7083 [1438]	8421 при k = 7173 [1439]	8531 при k = 7173 [1440]
8641 при k = 7173 [1441]	8751 при k = 7173 [1442]	8971 при k = 7173 [1443]	9312 при k = 7173 [1444]	9532 при k = 7173 [1445]
9642 при k = 7173 [1446]	9752 при k = 7173 [1447]	9862 при k = 7173 [1448]	8521 при k = 7263 [1449]	8631 при k = 7263 [1450]
8741 при k = 7263 [1451]	8961 при k = 7263 [1452]	9412 при k = 7263 [1453]	9632 при k = 7263 [1454]	9742 при k = 7263 [1455]
9852 при k = 7263 [1456]	8621 при k = 7353 [1457]	8731 при k = 7353 [1458]	8951 при k = 7353 [1459]	9512 при k = 7353 [1460]
9732 при k = 7353 [1461]	9842 при k = 7353 [1462]	8721 при k = 7443 [1463]	8941 при k = 7443 [1464]	9612 при k = 7443 [1465]
9832 при k = 7443 [1466]	9281 при k = 7452 [1467]	8931 при k = 7533 [1468]	9712 при k = 7533 [1469]	9271 при k = 7542 [1470]
9381 при k = 7542 [1471]	8921 при k = 7623 [1472]	9812 при k = 7623 [1473]	9261 при k = 7632 [1474]	9371 при k = 7632 [1475]
9481 при k = 7632 [1476]	9251 при k = 7722 [1477]	9361 при k = 7722 [1478]	9471 при k = 7722 [1479]	9581 при k = 7722 [1480]
9241 при k = 7812 [1481]	9351 при k = 7812 [1482]	9461 при k = 7812 [1483]	9571 при k = 7812 [1484]	9681 при k = 7812 [1485]
9231 при k = 7902 [1486]	9341 при k = 7902 [1487]	9451 при k = 7902 [1488]	9561 при k = 7902 [1489]	9671 при k = 7902 [1490]
9781 при k = 7902 [1491]	9321 при k = 8082 [1492]	9431 при k = 8082 [1493]	9541 при k = 8082 [1494]	9651 при k = 8082 [1495]
9761 при k = 8082 [1496]	9871 при k = 8082 [1497]	9421 при k = 8172 [1498]	9531 при k = 8172 [1499]	9641 при k = 8172 [1500]
9751 при k = 8172 [1501]	9861 при k = 8172 [1502]	9521 при k = 8262 [1503]	9631 при k = 8262 [1504]	9741 при k = 8262 [1505]
9851 при k = 8262 [1506]	9621 при k = 8352 [1507]	9731 при k = 8352 [1508]	9841 при k = 8352 [1509]	9721 при k = 8442 [1510]
9831 при k = 8442 [1511]	9821 при k = 8532 [1512]

Последний раз редактировалось Sasha_Smirnov; 25.11.2012 в 04:07.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 25.11.2012, 03:37   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Саша, а Вы условие задачи внимательно читали?!

Цитата:
Есть такое задание: есть четырехзначное число. его цифры различны друг от друга и не равны нулю.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2012, 04:09   #7
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Читал-то внимательно — на том и погорел! Извините, но уж очень путано-перепутано, а я без стакана!
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача в Паскале kos19 Помощь студентам 6 26.04.2012 15:05
Задача на Паскале noone Помощь студентам 4 12.01.2012 15:58
Задача в Паскале Likon Помощь студентам 1 17.10.2010 19:26