Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывести числа на экран, Интересная задача 
:(
    Опции темы
Япончик
Дата 12.11.2005, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.10.2005

Репутация: нет
Всего: нет



По СИ задача такая:
Вывести на экран все пятизначные числа, состоящие из несовпадающих цифр.
smile
PM MAIL   Вверх
darkart
Дата 12.11.2005, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 26
Всего: 31



Где-то так...
Код

#include<stdio.h>
int main()
{
int i1,i2,i3,i4,i5;
for(i1=1;i1<10;i1++)
  for(i2=0;i2<10;i2++)
    if(i1!=i2)
      for(i3=0;i3<10;i3++)
        if(i3!=i1&&i3!=i2)
          for(i4=0;i4<10;i4++)
            if(i4!=i1&&i4!=i2&&i4!=i3)
              for(i5=0;i5<10;i5++)  
                 if(i5!=i1&&i5!=i2&&i5!=i3&&i5!=i4)
                   printf("%d%d%d%d%d ",i1,i2,i3,i4,i5);
  return 0;
}


Это сообщение отредактировал(а) darkart - 12.11.2005, 22:12
PM MAIL WWW ICQ Skype GTalk   Вверх
nikitao
Дата 12.11.2005, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 3
Всего: 26



Или более универсальное решение
Код

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
bool initilizator(char *str);
int main(void)
{
    long i;
    char a[6];
    for (i=10000;i<100000;i++)
    {
        itoa(i,a,10);
        if(initilizator(a))printf("%d ",i);
    }
    getch();
    return 0;
}
bool initilizator(char *str)
{
    int i,j;
    int len=strlen(str);
    for (i=0;i<len;i++)
    {
        for (j=i+1;j<len;j++)
            if (str[i]==str[j])return false;
    }
    return true;
}

Подходит не только для 5тизначных,но идля любых чисел(если поменять одну цифру в коде) smile

Это сообщение отредактировал(а) nikitao - 13.11.2005, 17:06


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
LSD
Дата 12.11.2005, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



darkart в твоем примере будут выведены числа у которых для цифр выполняется неравенство a1 < a2 < a3 < a4 < a5 и например число 98765 выведено не будет, а по условию задачи должно.

Во внутреннем цикле надо еще перебрать все возможные перестановки из этих чисел.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
darkart
Дата 12.11.2005, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 26
Всего: 31



Цитата
darkart в твоем примере будут выведены числа у которых для цифр выполняется неравенство a1 < a2 < a3 < a4 < a5 и например число 98765 выведено не будет, а по условию задачи должно.

Уже исправил.
PM MAIL WWW ICQ Skype GTalk   Вверх
Rick
Дата 13.11.2005, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 4.11.2005
Где: Новосибирск

Репутация: 2
Всего: 3



а как насчет 39145 и пр.
--------------------
Не бывает атеистов в окопах под огнем   
PM MAIL ICQ   Вверх
LSD
Дата 13.11.2005, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Цитата(Rick @ 13.11.2005, 14:34)
а как насчет 39145 и пр.

Проверь smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
sergejzr
Дата 13.11.2005, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 11
Всего: 360



Ребята, цикл в цикле не только сотрятся запутанно и читаются тяжело, это так же является свидетельством того, что проблему решали не задумываясь над ней smile
предложу и своё решение smile

Код

#include "iostream.h"
int matrix[10]; //матрица, условно содержащая цифры 0-9

bool check(int num,int _switch)
{
    
    for(;num>0;num/=10) //идём, цифра за цифрой
    { 
        int cifra=num%10; 
        if(matrix[cifra]!=_switch) //проверка, отмечена ли цифра в матрице
        {
            matrix[cifra]=_switch;//цифры небыло, отметим
        }
        else return false; //цифра была, прекращаем цикл
    }  
  
return true;
}

int main()
{
 int _switch=1;
 //начальная инициализация. Все числа - 0
 for(int i=0;i<9;i++) matrix[i]=0;
    
 for(int num=10000;num<19999;num++,_switch++) //_switch необходимо увеличивать, чтобы значения матрицы всегда были разными
 {
  if(check(num,_switch)) cout<<num<<" "; //здесь всё ясно :) 
 }
    return 0;
}



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
darkart
Дата 13.11.2005, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 26
Всего: 31



Для проверки, открой файл созданный вот этим и поищи
Цитата
а как насчет 39145

Код

#include<stdio.h>
int main()
{
  const int n=10;
  FILE* f;
  int i1,i2,i3,i4,i5,num;
  f=fopen("output.txt","w");
  for(i1=1;i1<n;i1++)
    for(i2=0;i2<n;i2++)
      if(i1!=i2)
        for(i3=0;i3<n;i3++)
          if(i3!=i1&&i3!=i2)
            for(i4=0;i4<n;i4++)
              if(i4!=i1&&i4!=i2&&i4!=i3)
                for(i5=0;i5<n;i5++)  
                  if(i5!=i1&&i5!=i2&&i5!=i3&&i5!=i4)
                  {
                    num=i1*10000+i2*1000+i3*100+i4*10+i5;
                    printf("%d ",num);
                    fprintf(f,"%d\n",num);                            
                  }
  fclose(f);
  return 0;
}

PM MAIL WWW ICQ Skype GTalk   Вверх
nikitao
Дата 13.11.2005, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 3
Всего: 26



sergej.z,почему нежилательно вкладывать циклы?(ИМХО)Если этим не злоупотреблять(как у меня) и коменты добовлять ,то нормальный код выйдет.Надо было на C реализавать(ну это мелачь) и в 26 строчке кода должно быть num<99999

Проблемка в другом:если откомпилить все проги,то результат выйдет начиная с числа 65907(уж больно много чисел,консоль не справляется),есть ли красивое решение этой проблемы???


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
sergejzr
Дата 13.11.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 11
Всего: 360



Цитата(nikitao @ 13.11.2005, 15:45)
почему нежилательно вкладывать циклы?

Потому что это алгоритмическое убийство. Решение влоб перебором. Оценка не зависит от того, работает или не работает, но от того, сколько ты думал о проблеме, понял ли её досконально.

Красивое решение - в файл. Или ГУЙ рисуй со сроллбаром smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
S.A.P.
Дата 13.11.2005, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 1
Всего: 71



Вот мое решение:
Код

#include <iostream>
#include <conio.h>

using namespace std;

char number_set[10] = {0,1,2,3,4,5,6,7,8,9};
bool ban_set[10] = {false};


void print_perm( int depth, int cur_number )
{
    if ( depth <= 0 ){
        cout << cur_number << endl; 
        return;
    }
    
    for ( int i = 0; i < 10; i++ )
        if ( !ban_set[i] ) {
            ban_set[i] = true;
            print_perm( depth - 1, cur_number * 10 + number_set[i] );
            ban_set[i] = false;
        }
}            

int main(int argc, char *argv[])
{
    print_perm( 5, 0 );
    getch();
}


Это сообщение отредактировал(а) Perchilla - 14.11.2005, 09:41
PM MAIL   Вверх
sergejzr
Дата 13.11.2005, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 11
Всего: 360



Perchilla, прикольно smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1821 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.