Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
dolmatova22
17 / 0 / 1
Регистрация: 13.03.2010
Сообщений: 30
#1

Написать программу вывода трехзначных чисел Цукермана - C++

13.03.2010, 17:33. Просмотров 2795. Ответов 25
Метки нет (Все метки)

Числа Цукермана — такие натуральные числа, которые делятся на произведение своих цифр.

Например:
число 212 делится нацело на 2*1*2,
числа 1-9 делятся на само себя,
число 24 делится нацело на 2*4.

Написать программу вывода трехзначных чисел Цукермана. Числа выводить столбиками, по 5 в строке.

Помогите пожалуйста..?
Язык Си.

http://ru.wikipedia.org/wiki/Числа_Цукермана
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2010, 17:33     Написать программу вывода трехзначных чисел Цукермана
Посмотрите здесь:

C++ Формирование массива трехзначных чисел с помощью датчика случайных чисел и вывода его на экран
C++ Написать программу вывода на экран таблицы Пифагора
C++ Напишите программу поиска трехзначных чисел, таких, что сумма трех цифр на которые оканчивается квадрат этого числа, равняется этому числу.
Написать программу вывода площадей колец C++
C++ Написать программу ввода и вывода строки на C++
2. Составить программу для определения количества трехзначных чисел, кратных заданному числу C++
C++ Написать программу, которая получает два трехзначных числа, меняет у них местами средние цифры и выводит результат в консоль
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vorona
Peace 2 all shining faces
666 / 528 / 44
Регистрация: 05.03.2010
Сообщений: 1,271
13.03.2010, 18:01     Написать программу вывода трехзначных чисел Цукермана #2
на ноль делить нельзя, например 101, 102 и т.д., их не записывать значит?
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,340
13.03.2010, 18:43     Написать программу вывода трехзначных чисел Цукермана #3
Размялся. Тестируй.
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main(){
 int j=0; 
 for (int i= 100; i< 1000;) {
  (!(i%(i++%10+i%100/10+i%1000/100)))? (printf ("%d ", i-1, j++)):(1);
  (!(j%5)&&j)?printf ("\n", j=0):(1);
 }
 getchar ();      
 return 0;
}
Vorona
Peace 2 all shining faces
666 / 528 / 44
Регистрация: 05.03.2010
Сообщений: 1,271
13.03.2010, 20:12     Написать программу вывода трехзначных чисел Цукермана #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
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
 
int main()
{
    clrscr();
 
    long long i, j, cyk[300], num[3], count=0, k=0;
    char str[3], str1[3];
 
    for(i = 100; i < 1000; i++){
        for(j = 0; j  < 3; j++){
            itoa(i, str1, 10);
            str[0] = str1[j];
            num[j] = atoi(str);
        }
 
        for(j = 0; j < 3; j++)
            if(num[j] != 0 && i % num[j] == 0)
                k++;
 
        if(k == 3){
            cyk[count] = i;
            count++;
        }
        k = 0;
    }
 
    for(i = 0; i < count; i++)
        cout<<cyk[i]<<' ';
 
    getch();
    return 0;
}
Добавлено через 15 минут
забыл про столбики, если правильно понял, то замени 30 и 31 строки
C
1
2
for(i = 0; i < count; i++)
                cout<<cyk[i]<<' ';
на
C
1
2
3
4
5
    for(i = 1; i < count; i++){
        cout<<cyk[i]<<' ';
            if(i % 5 == 0)
                cout<<endl;
        }
dolmatova22
17 / 0 / 1
Регистрация: 13.03.2010
Сообщений: 30
13.03.2010, 22:24  [ТС]     Написать программу вывода трехзначных чисел Цукермана #5
kravam

Программа выдает ошибки..
Простите мне мое незнание,
Можно ли узнать, здесь переменная i в качестве элемента массива?
А j - количество столбцов? Но почему j=0? В описывании переменных...
! - логическое НЕ?
? - условная операция?, так?

И : (1) - что означает?

Добавлено через 1 минуту
Vorona

Простите, я видимо, совсем неопытый пользователь. Код очень сложен, не могу понять, что к чему...Во всяком случае - Благодарю Вас!
Спасибо Вам...
Day
1152 / 957 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
13.03.2010, 22:53     Написать программу вывода трехзначных чисел Цукермана #6
Попробуем попроще.
Только есть вопрос.
Число должно делиться на ПРОИЗВЕДЕНИЕ своих цифр или только на КАЖДУЮ из них?
Числа с 0 отбрасываем.
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
  int cc[3];  // Здесь будут цифры
  m = 0;  // Это чтоб было 5 штук на строчке
  for(i=111; i<1000; i++) {
     ii = i;
     for(j=0; j<3; j++) {
        c[j] = ii % 10;
        if (cc[j]==0) break;
     }
     if (j==3) {  // Все цифры ненулевые
        k=1;    // Это для ПРОИЗВЕДЕНИЯ
        for (j=0; j<3; j++) k*= c[j];
        if ((i%k)==0) { 
          printf("%4d", i);
          m++;
          if ((m%5)==0) printf("\n");
        }
           // А это для КАЖДОГО
         for(j=0; j<3; j++) if (i%c[j]) break;
         if (j==3) { // Все разделилось
          printf("%4d", i);
          m++;
          if ((m%5)==0) printf("\n");
        }
     }
  }
dolmatova22
17 / 0 / 1
Регистрация: 13.03.2010
Сообщений: 30
13.03.2010, 23:10  [ТС]     Написать программу вывода трехзначных чисел Цукермана #7
Число должно делиться на произведение своих цифр, все же..
Day
1152 / 957 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
13.03.2010, 23:19     Написать программу вывода трехзначных чисел Цукермана #8
Тогда строчки 18-23 просто выкидываете.
И еще, прошу прощения, описочка вышла.
После строчки 8: ii /= 10;
dolmatova22
17 / 0 / 1
Регистрация: 13.03.2010
Сообщений: 30
13.03.2010, 23:24  [ТС]     Написать программу вывода трехзначных чисел Цукермана #9
То есть Здесь m - количество элементов в строчке..

А ii = i - ?
Day
1152 / 957 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
13.03.2010, 23:53     Написать программу вывода трехзначных чисел Цукермана #10
dolmatova22,
А ii = i - ?
Это так. ii - временная переменная, она изменяется (ii /= 10)
Она нужна только чтоб цифры посчитать и цикловую переменную i не испортить
Описки возможны, я не проверял, просто идею подкинул
Vorona
Peace 2 all shining faces
666 / 528 / 44
Регистрация: 05.03.2010
Сообщений: 1,271
14.03.2010, 01:19     Написать программу вывода трехзначных чисел Цукермана #11
dolmatova22, на самом деле код несложный совсем, разве что строки 14, 15, 16 могут показаться непонятными, но там я просто перевожу целое число в строку, т.е. массив символов и в цикле разбираю каждый символ числа, как элемент массива и снова перевожу в число, это первое, что пришло на ум, т.к. с делениями на 10 с первой попытки не вышло, ну и т.д. могу объяснить, если будет необходимость)
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.03.2010, 02:47     Написать программу вывода трехзначных чисел Цукермана #12
dolmatova22,
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
#include <stdio.h>
 
// Возвращает произведение цифр числа n
int DigitProduct(int n)
{
  int result = 1;
 
  while (n) {
    result *= n % 10;
    n /= 10;
  }
 
  return result;
}
 
int main()
{
  int i;
  int count  = 0;
  int product;
 
  for (i = 100; i < 1000; ++i) {
    product = DigitProduct(i);
 
    if (product == 0)
      continue;
    
    if (i % product == 0) {
      printf("%d ", i);
 
      count++;
 
      if (count % 5 == 0)
        printf("\n");
    }
  }
  
  return 0;
}
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,340
14.03.2010, 04:24     Написать программу вывода трехзначных чисел Цукермана #13
АВтор, слушай. Ты, впредь всё-таки, будь внимательнее. Определение чисел Цукермана ты дал верное, но вот объяснил неправильно. Уверен, что ты уже сам понял, что, число 212, к примеру, является числом Цукермана не потому, что делится на 2, 1 и 2, а на 2*1*2

...Я напутал. Я выдал код, находящий числа, которые нацело делятся на СУММУ, а не на ПРОИЗВЕДЕНИЕ своих цифр.
Может, кому пригодится

Вот правильный код
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(){
 int j=0; 
 int proizv;
 for (int i= 100; i< 1000;) {
  ((proizv=((i%10)*(i%100/10)*(i%1000/100)))&&(!(i%proizv)))? (printf ("%d ", i++, j++)):(i++);
  (!(j%5)&&j)?printf ("\n", j=0):(1);
 }
 getchar ();      
 return 0;
}
dolmatova22
17 / 0 / 1
Регистрация: 13.03.2010
Сообщений: 30
14.03.2010, 11:48  [ТС]     Написать программу вывода трехзначных чисел Цукермана #14
Благодарю Вас

Добавлено через 14 минут
kravam

здесь переменная i в качестве элемента массива
Тогда, вероятно, надо ее прописать как int A[i] ?

Добавлено через 1 минуту
CyBOSSeR

Использую getch();
но программа не задерживается..
но мельком видно, что выдает правильные результаты
Как быть?
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,340
14.03.2010, 12:00     Написать программу вывода трехзначных чисел Цукермана #15
Цитата Сообщение от dolmatova22 Посмотреть сообщение
Благодарю Вас

Добавлено через 14 минут
kravam

здесь переменная i в качестве элемента массива
Тогда, вероятно, надо ее прописать как int A[i] ?

Добавлено через 1 минуту
Нет необходимости ничё изменять. Вывод проги кажись полностью соответствует заданию.
i это просто переменая типа int одно временно являющаяся счётчиком цикла.
В этом цикле я перебираю все числа от 100 до 1000 и как только нахожу нужное, вывожу i на экран.

Добавлено через 1 минуту
Зачем вообще массив? К чему массив? В задании не сказано "массив" да и без массива проще. А задействовать массив в этой задаче не рекомендую. Ибо это затраты памяти. Не вошло бы в привычку.

Добавлено через 40 секунд
getchar () попробуй.
dolmatova22
17 / 0 / 1
Регистрация: 13.03.2010
Сообщений: 30
14.03.2010, 12:14  [ТС]     Написать программу вывода трехзначных чисел Цукермана #16
kravam
expression syntax in function main
выдает
в строке 6
for (int i= 100; i< 1000 {
А именно в (Int i=100)
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,340
14.03.2010, 12:20     Написать программу вывода трехзначных чисел Цукермана #17
Ну так это может особенности компилятора.
Попробуй объяви i вне цикла
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.03.2010, 12:43     Написать программу вывода трехзначных чисел Цукермана #18
Цитата Сообщение от dolmatova22 Посмотреть сообщение
Использую getch();
но программа не задерживается..
но мельком видно, что выдает правильные результаты
Либо добавь еще один getch либо перед return 0 напиши:
C
1
system("pause");
dolmatova22
17 / 0 / 1
Регистрация: 13.03.2010
Сообщений: 30
14.03.2010, 18:48  [ТС]     Написать программу вывода трехзначных чисел Цукермана #19
kravam!
Безумно Вам благодарна!
Все получилось!
Позвольте попросить?..
(!(j%5)&&j)? вот эту строчку словами объяснить..
"!" и "?" здесь в качестве "логическое НЕ" и "условная операция" ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2010, 19:14     Написать программу вывода трехзначных чисел Цукермана
Еще ссылки по теме:

C++ Напишите программу нахождения всех трехзначных простых чисел
Написать программу вывода сетки таблицы размером 3*2 C++
Написать программу для вывода на экран чисел Фибоначчи, меньших заданного числа Q C++
Написать программу, которая должна включать функции для: - вывода шапки таблицы; - вывода данных одной строки C++
Составить программу поиска трехзначных целых чисел, делящихся нацело на 9 C++

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

Или воспользуйтесь поиском по форуму:
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
14.03.2010, 19:14     Написать программу вывода трехзначных чисел Цукермана #20
C++
1
2
3
(если j кратно 5 и j не равен нулю) ?
    выполнить это :
    выполнить это, если условие не выполняется;
Yandex
Объявления
14.03.2010, 19:14     Написать программу вывода трехзначных чисел Цукермана
Ответ Создать тему
Опции темы

Текущее время: 21:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru