Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
dolmatova22
17 / 0 / 0
Регистрация: 13.03.2010
Сообщений: 30
1

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

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

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

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

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

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

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

Формирование массива трехзначных чисел с помощью датчика случайных чисел и вывода его на экран
Создать две функции для работы с массивом: • формирование массива трехзначных...

Написать программу для вывода на экран чисел Фибоначчи, меньших заданного числа Q
Написать программу для вывода на экран чисел Фибоначчи (1,1,2,3,5,8 ... xn =...

Написать программу, которая должна включать функции для: - вывода шапки таблицы; - вывода данных одной строки
Написать программу, которая должна включать функции для: - вывода шапки...

Напишите программу нахождения всех трехзначных простых чисел
Найти все трехзначные простые числа

Составить программу поиска трехзначных целых чисел, делящихся нацело на 9
Помогите написать программу с++ при помощи цикла while. Очень надо, всем...

25
Vorona
Peace 2 all shining faces
672 / 534 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
13.03.2010, 18:01 2
на ноль делить нельзя, например 101, 102 и т.д., их не записывать значит?
1
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
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;
}
1
Vorona
Peace 2 all shining faces
672 / 534 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
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;
        }
1
dolmatova22
17 / 0 / 0
Регистрация: 13.03.2010
Сообщений: 30
13.03.2010, 22:24  [ТС] 5
kravam

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

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

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

Простите, я видимо, совсем неопытый пользователь. Код очень сложен, не могу понять, что к чему...Во всяком случае - Благодарю Вас!
Спасибо Вам...
0
Day
1159 / 964 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
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");
        }
     }
  }
1
dolmatova22
17 / 0 / 0
Регистрация: 13.03.2010
Сообщений: 30
13.03.2010, 23:10  [ТС] 7
Число должно делиться на произведение своих цифр, все же..
0
Day
1159 / 964 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
13.03.2010, 23:19 8
Тогда строчки 18-23 просто выкидываете.
И еще, прошу прощения, описочка вышла.
После строчки 8: ii /= 10;
0
dolmatova22
17 / 0 / 0
Регистрация: 13.03.2010
Сообщений: 30
13.03.2010, 23:24  [ТС] 9
То есть Здесь m - количество элементов в строчке..

А ii = i - ?
0
Day
1159 / 964 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
13.03.2010, 23:53 10
dolmatova22,
А ii = i - ?
Это так. ii - временная переменная, она изменяется (ii /= 10)
Она нужна только чтоб цифры посчитать и цикловую переменную i не испортить
Описки возможны, я не проверял, просто идею подкинул
1
Vorona
Peace 2 all shining faces
672 / 534 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
14.03.2010, 01:19 11
dolmatova22, на самом деле код несложный совсем, разве что строки 14, 15, 16 могут показаться непонятными, но там я просто перевожу целое число в строку, т.е. массив символов и в цикле разбираю каждый символ числа, как элемент массива и снова перевожу в число, это первое, что пришло на ум, т.к. с делениями на 10 с первой попытки не вышло, ну и т.д. могу объяснить, если будет необходимость)
1
CyBOSSeR
Эксперт С++
2310 / 1683 / 148
Регистрация: 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;
}
1
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
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;
}
1
dolmatova22
17 / 0 / 0
Регистрация: 13.03.2010
Сообщений: 30
14.03.2010, 11:48  [ТС] 14
Благодарю Вас

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

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

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

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

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

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

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

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

Добавлено через 40 секунд
getchar () попробуй.
1
dolmatova22
17 / 0 / 0
Регистрация: 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)
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
14.03.2010, 12:20 17
Ну так это может особенности компилятора.
Попробуй объяви i вне цикла
1
CyBOSSeR
Эксперт С++
2310 / 1683 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
14.03.2010, 12:43 18
Цитата Сообщение от dolmatova22 Посмотреть сообщение
Использую getch();
но программа не задерживается..
но мельком видно, что выдает правильные результаты
Либо добавь еще один getch либо перед return 0 напиши:
C
1
system("pause");
1
dolmatova22
17 / 0 / 0
Регистрация: 13.03.2010
Сообщений: 30
14.03.2010, 18:48  [ТС] 19
kravam!
Безумно Вам благодарна!
Все получилось!
Позвольте попросить?..
(!(j%5)&&j)? вот эту строчку словами объяснить..
"!" и "?" здесь в качестве "логическое НЕ" и "условная операция" ?
0
M128K145
Эксперт JavaЭксперт С++
8326 / 3546 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
14.03.2010, 19:14 20
C++
1
2
3
(если j кратно 5 и j не равен нулю) ?
    выполнить это :
    выполнить это, если условие не выполняется;
1
14.03.2010, 19:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2010, 19:14

Написать программу, которая получает два трехзначных числа, меняет у них местами средние цифры и выводит результат в консоль
#include &lt;iostream&gt; using namespace std; void main() { int num = 0; int...

Напишите программу поиска трехзначных чисел, таких, что сумма трех цифр на которые оканчивается квадрат этого числа, равняется этому числу.
Напишите программу поиска трехзначных чисел, таких, что сумма трех цифр на...

Написать программу ввода и вывода строки на C++
Регите пожалуйста !


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

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

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