Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Nevi
0 / 0 / 0
Регистрация: 30.09.2012
Сообщений: 7
1

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

30.09.2012, 19:25. Просмотров 822. Ответов 10
Метки нет (Все метки)

Задали задачу. В голове вертится решение, но записать в коде не хватает знаний. Помогите, буду разбирать код.

Создайте программу, которая находит все n-значные числа ( 2 <= n <= 9 ), которые:
1) состоят из разных цифр;
2) являются кубом натульного числа.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2012, 19:25
Ответы с готовыми решениями:

Найти и вывести все числа в интервале от 1 до N–1, у которых произведение всех цифр совпадает с произведением цифр данного числа
Дано натуральное число N. Найти и вывести все числа в интервале от 1 до N–1, у...

Найти натуральные числа делящихся нацело на заданные числа и находящихся в заданном интервале
Найти 20 первых натуральных чисел, делящихся нацело на 13 или на 17, и...

Найти все простые числа, что лежат в заданном интервале
Вот меня заинтересовала такая задача, есть 2 числа, пусть A ;B как найти все...

Найти числа в интервале от 1 до n с заданной суммой цифр
Найти числа в интервале от 1 до n с заданной суммой цифр. Ввод с консоли....

Посчитать, сколько на заданном интервале чисел, которые делятся на 3
Задача такова: Дано натуральное число n. Напишите программу, которая будет...

10
valeriikozlov
Эксперт С++
4688 / 2514 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
30.09.2012, 20:30 2
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
#include <stdio.h>
#include <math.h>
int main()
{
    int n, i, j, a, b, c[10];
    printf("n= ");
    scanf("%d", &n);
    switch(n)
    {
    case 2: a=10; b=99; break;
    case 3: a=100; b=999; break;
    case 4: a=1000; b=9999; break;
    case 5: a=10000; b=99999; break;
    case 6: a=100000; b=999999; break;
    case 7: a=1000000; b=9999999; break;
    case 8: a=10000000; b=99999999; break;
    case 9: a=100000000; b=999999999; break;
    }
    printf("Sost iz razn cifr:\n");
    for(i=a; i<=b; i++)
    {
        for(j=0; j<10; j++)
            c[j]=0;
        j=i;
        while(j)
        {
            c[j%10]++;
            j/=10;
        }
        for(j=0; j<10; j++)
            if(c[j]>1)
                break;
        if(j==10)
            printf("%d\n", i);
    }
    printf("Yavl kubom:\n");
    for(i=a; i<=b; i++)
    {
        j=(int)pow((double)i, 1./3);        
        if(j*j*j==i)
            printf("%d\n", i);
    }
    return 0;
}
1
Nevi
0 / 0 / 0
Регистрация: 30.09.2012
Сообщений: 7
30.09.2012, 21:22  [ТС] 3
valeriikozlov, Спс за отзыв, но запустив программу, она выдаёт числа до бесконечности. Я забыл упамянуть , что два условия должны выполняться одновременно.
0
valeriikozlov
Эксперт С++
4688 / 2514 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
30.09.2012, 22:10 4
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
#include <stdio.h>
#include <math.h>
int main()
{
    int n, i, j, a, b, c[10];
    printf("n= ");
    scanf("%d", &n);
    switch(n)
    {
    case 2: a=10; b=99; break;
    case 3: a=100; b=999; break;
    case 4: a=1000; b=9999; break;
    case 5: a=10000; b=99999; break;
    case 6: a=100000; b=999999; break;
    case 7: a=1000000; b=9999999; break;
    case 8: a=10000000; b=99999999; break;
    case 9: a=100000000; b=999999999; break;
    }    
    for(i=a; i<=b; i++)
    {
        for(j=0; j<10; j++)
            c[j]=0;
        j=i;
        while(j)
        {
            c[j%10]++;
            j/=10;
        }
        for(j=0; j<10; j++)
            if(c[j]>1)
                break;
        if(i==64)
            int y=0;
        if(j==10)
        {
            j=(int)(pow((double)i, 1./3)+0.00000000001);
            if(j*j*j==i)
                printf("%d\n", i);
 
        }            
    }    
    return 0;
}
1
Nevi
0 / 0 / 0
Регистрация: 30.09.2012
Сообщений: 7
30.09.2012, 22:46  [ТС] 5
valeriikozlov, CodeBlocks ругается на 33-ю строчку.
|error: expected expression before 'int'|
0
valeriikozlov
Эксперт С++
4688 / 2514 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
30.09.2012, 22:57 6
Цитата Сообщение от Nevi Посмотреть сообщение
valeriikozlov, CodeBlocks ругается на 33-ю строчку.
|error: expected expression before 'int'|
уберите из моего кода строчки: 32 и 33. Это для отладки их использовал и забыл убрать. Они в коде не нужны совсем.
0
Nevi
0 / 0 / 0
Регистрация: 30.09.2012
Сообщений: 7
30.09.2012, 23:23  [ТС] 7
valeriikozlov, Спс большое. Работает программа, правда выдает числа с 125, т.е. 5 в кубе. Тройку и четверку в кубе пропускает(двухзначные 27 и 64). Так же ввод переменной n лишнее, или я не понял её функции. Главное есть код, буду разбираться что к чему. Спс ещё раз.
0
valeriikozlov
Эксперт С++
4688 / 2514 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
30.09.2012, 23:49 8
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Nevi Посмотреть сообщение
Тройку и четверку в кубе пропускает(двухзначные 27 и 64).
так Вам значит n вводить не нужно. Тогда так:
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
#include <stdio.h>
#include <math.h>
int main()
{
    int i, j, c[10];
   
    for(i=10; i<=999999999; i++)
    {
        j=(int)(pow((double)i, 1./3)+0.00000000001);
        if(j*j*j==i)
        {
            for(j=0; j<10; j++)
                c[j]=0;
            j=i;
            while(j)
            {
                c[j%10]++;
                j/=10;
            }
            for(j=0; j<10; j++)
                if(c[j]>1)
                    break; 
            if(j==10)
                printf("%d\n", i);
        }                   
    }    
    return 0;
}
минуты 2 нужно подождать.
1
Nevi
0 / 0 / 0
Регистрация: 30.09.2012
Сообщений: 7
01.10.2012, 00:13  [ТС] 9
valeriikozlov, Вот это то что надо. Я то в предыдущем коде, много функций , которых нам первокурсникам заочникам даже не объясняли. Если не сложно, можешь пояснить, что это за переменная c[10] ? Я вижу, что с помощью неё проверяется, есть ли в числе повторяющиеся цифры. Но именно, такое обозначение ещё не встречалось с[].
Так же не понятна запись +0.00000000001, при корне 3 степени(9 строчка). Она обязательна?
0
valeriikozlov
Эксперт С++
4688 / 2514 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
01.10.2012, 06:15 10
Цитата Сообщение от Nevi Посмотреть сообщение
что это за переменная c[10]
это массив для элементов типа int размером 10. Объявлен здесь:
Цитата Сообщение от valeriikozlov Посмотреть сообщение
C
1
int i, j, c[10];
Цитата Сообщение от Nevi Посмотреть сообщение
Так же не понятна запись +0.00000000001, при корне 3 степени(9 строчка). Она обязательна?
Проверку условия что число является кубом натульного числа делаю так: извлекаю корень третьей степени и потом полученное (округленное до целого) возвожу в третью степень. Если значение не изменилось, то это число является кубом натурального числа.
Из-за погрешностей pow() этот способ не показывал, что кубом натурального числа является например число 64. Пришлось прибегнуть к +0.00000000001.
1
easybudda
Модератор
Эксперт CЭксперт С++
10209 / 6108 / 1536
Регистрация: 25.07.2009
Сообщений: 11,608
01.10.2012, 16:14 11
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Алгоритм из серии "тупее не придумаешь", но вроде работает и как-раз для учебного заведения...
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
#include <stdio.h>
 
int is_cube(unsigned n) {
    unsigned i, cube;
    
    for ( i = 2; ( cube = i * i * i ) < n; ++i )
        ;
        
    return ( cube == n );
}
 
int have_same_digits(unsigned n) {
    unsigned num, last;
    
    while ( n ) {
        for ( num = n / 10, last = n % 10; num; num /= 10 )
            if ( last == num % 10 )
                return 1;
        n /= 10;
    }
    
    return 0;
}
 
#define START 10
#define STOP 1000000000
 
int main(void) {
    unsigned i;
    
    for ( i = START; i < STOP; ++i )
        if ( ! have_same_digits(i) && is_cube(i) )
            printf("%u\n", i);
    
    return 0;
}
1
01.10.2012, 16:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2012, 16:14

В символьной строке оставить только те слова, которые состоят только из разных букв
Мне дали такое задание В символьной строке оставить только те слова, которые...

Вывести те числа, которые делятся без остатка на цифры, из которых состоят
Здравствуйте) Вот суть задания: Есть целые числа от 10 до 999, нужно...

Получение случайного числа в заданном интервале
Ребята подскажите пожалуйста хороший способ реализации рандома в си. Нужен от 0...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru