2 / 2 / 3
Регистрация: 22.10.2014
Сообщений: 26
1

Найти все пятизначные числа, в которых ровно две одинаковые цифры (только циклами !)

25.10.2014, 16:05. Показов 2384. Ответов 9
Метки нет (Все метки)

Помогите пожалуйста. Никак не получается решить задачу. Необходимо вывести на экран все пятизначные числа, в которых ровно две одинаковые цифры (необходимо решить задачу только циклами) !
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2014, 16:05
Ответы с готовыми решениями:

Найти все пятизначные числа, в которых ровно две одинаковые цифры
Помогите написать программу циклами! Не получается что-то. Необходимо: вывести на экран все...

Найти все четырехзначные числа, в которых ровно две одинаковые цифры.
uses crt; var a,b,c,d:integer; begin clrscr; for a:= 1 to 9 do for b:= 0 to 9 do for...

Найти все 4-значные числа, у которых ровно две одинаковые цифры
Найти все 4-значные числа, у которых ровно две одинаковые цифры. Либо 7 либо 8 через функцию +

Найти все четырехзначные числа, в которых ровно две одинаковых цифры
Найти все четырехзначные числа, в которых ровно две одинаковых цифры

9
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
25.10.2014, 16:17 2
Покажи, что сделал.
0
2 / 2 / 3
Регистрация: 22.10.2014
Сообщений: 26
25.10.2014, 17:58  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string.h>
int main(void) {
    for (int a_1 = 1; a_1 < 10; a_1++)
        for (int a_2 = 0; a_2 < 10; a_2++)
        {
        if ( a_2 == a_1) continue;
        for (int a_3 = 0; a_3 < 10; a_3++)
        {
            if (a_3 == a_1 || a_3 == a_2) continue;
            for (int a_4 = 0; a_4 < 10; a_4++)
            {
                if (a_4 == a_1 || a_4 == a_2 || a_4 == a_3) continue;
                for (int a_5 = 0; a_5 < 10; a_5++)
                {
                    if (a_5 == a_1 || a_5 == a_2 || a_5 == a_3 || a_5 == a_4) continue;
                    int n = a_1*10000+a_2*1000+a_3*100+a_4*10+a_5;
                    std::cout << n << "\n"; 
                }
            }
        }
        }
    system("pause");
    return 0;
}
Добавлено через 2 минуты
У меня получилось сделать наоборот, вывелись все пятизначные числа, где нет ни одной повторяющейся цифры.
0
342 / 342 / 331
Регистрация: 02.10.2014
Сообщений: 666
25.10.2014, 18:19 4
У меня получилось 90720 чисел (включая отрицательные).
Код на С++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <iomanip>
 
using namespace std;
 
int main(){
    
    int digits[5];
    int count = 0;
    for (int n = 10000; n <= 99999; ++n){
        
        int temp = n;
        for(int i = 0; i < 5; ++i){         
            digits[i] = temp % 10;
            temp /= 10;
        }
        
        int t = 0;
        int k = 0;
        for (int i = 0; i < 5; ++i){            
            k = 1;
            for (int j = i + 1; j < 5; ++j)
                if (digits[i] == digits[j])
                    ++k;
                
            if (k > 2){
                t = 2;
                break;
            }
            if (k == 2)
                ++t;
        }
        
        if (t == 1){            
            cout << setw(7) << n;
            cout << " -"<< setw(5) << n;
            count +=2;
            if (count % 10 == 0)
                cout << endl;
        }
    }
    
    cout << "count = " << count << endl;
        
    return 0;
}
0
2756 / 1910 / 569
Регистрация: 05.06.2014
Сообщений: 5,560
25.10.2014, 18:24 5
Лучший ответ Сообщение было отмечено Italy как решение

Решение

М... Тупо, в лоб:
C++
1
2
3
4
5
6
7
8
9
10
for(int N=10000;N<=99999;++N)
{
    int count[10]={0,0,0,0,0,0,0,0,0,0};
    int pair_count=0;
    for(int div=1;div<=10000;div*=10)
        if(count[(N/div)%10]++)
            ++pair_count;
    if(pair_count==1)
        cout<<N<<endl;
}
1
2 / 2 / 3
Регистрация: 22.10.2014
Сообщений: 26
25.10.2014, 19:15  [ТС] 6
Извините, я только изучаю с ++, а int digits[5] - это разве не массив?
Просто решить задачу нужно исключительно циклами!

Добавлено через 1 минуту
int count[10]={0,0,0,0,0,0,0,0,0,0};
Вы решили массивом, а нужно только использовать циклы!
0
2756 / 1910 / 569
Регистрация: 05.06.2014
Сообщений: 5,560
25.10.2014, 19:24 7
Лучший ответ Сообщение было отмечено Italy как решение

Решение

Цитата Сообщение от Italy Посмотреть сообщение
Вы решили массивом, а нужно только использовать циклы!
Я решил переменной типа "массив" по которой катается цикл. Извините, но вообще без переменных у вас останется только вечный while(true).
C++
1
2
3
4
5
6
7
8
9
10
for(int N=10000;N<=99999;++N)
{
    int pair_count=0;
    for(int div1=1;div1<=10000;div1*=10)
        for(int div2=div1*10;div2<=10000;div2*=10)
            if((N/div1)%10==(N/div2)%10)
                ++pair_count;
    if(pair_count==1)
        cout<<N<<endl;
}
1
2 / 2 / 3
Регистрация: 22.10.2014
Сообщений: 26
25.10.2014, 19:30  [ТС] 8
Я понимаю, вот в этом и заключается трудность, не могу только циклами решить эту задачу(
0
342 / 342 / 331
Регистрация: 02.10.2014
Сообщений: 666
25.10.2014, 19:59 9
Лучший ответ Сообщение было отмечено Italy как решение

Решение

Цитата Сообщение от Italy Посмотреть сообщение
int digits[5] - это разве не массив
Код на С++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <iomanip>
 
using namespace std;
 
int digit(int i, int n);
 
int main(){
    
   int count = 0;
   for (int n = 10000; n <= 99999; ++n){
            
      int t = 0;
      int k = 0;
      for (int i = 0; i < 5; ++i){            
         k = 1;
         for (int j = i + 1; j < 5; ++j)
               if (digit(i,n) == digit(j,n))
                  ++k;
                
         if (k > 2){
            t = 2;
            break;
         }
         if (k == 2)
            ++t;
      }
        
      if (t == 1){            
         cout << setw(7) << n;
         cout << " -"<< setw(5) << n;
         count +=2;
         if (count % 10 == 0)
            cout << endl;
      }
   }
    
   cout << endl << "count = " << count << endl;
        
   return 0;
}
 
int digit(int i, int n){
    
    for (int k = 0; k < i; ++k)
        n /= 10;
    return n % 10;
}

Если функция не нравится уберите и её.
1
2 / 2 / 3
Регистрация: 22.10.2014
Сообщений: 26
25.10.2014, 20:14  [ТС] 10
Спасибо, сейчас буду разбираться.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2014, 20:14
Помогаю со студенческими работами здесь

Найти все трехзначные числа, в которых есть две одинаковые цифры
Найти все трехзначные числа, в которых есть две одинаковые цифры. Нужно написать задачу на бэйсике

Найти все трехзначные числа, в которых есть две одинаковые цифры
Помогите, люди добрые! Нужно решить задачу: Найти все трехзначные числа, в которых есть две...

Найти все четырехзначные числа, в которых есть две одинаковые цифры
Найти все четырехзначные числа, в которых есть две одинаковые цифры.

Найти все четырёхзначные числа,в которых есть две одинаковые цифры
Найти все четырёхзначные числа,вкоторых есть две одинаковые цифры

Найти все четырехзначные числа, в которых есть две одинаковые цифры
найти все четырехзначные числа, в которых есть две одинаковые цифры

Найти все четырехзначные числа, в которых есть две одинаковые цифры
Программа работает, но что-то с условием. Выдаются числа, где и 3 цифры одинаковы. Проверьте,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru