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

Перебор всех чисел определенной длины и системы счисления

21.10.2015, 17:41. Просмотров 893. Ответов 9
Метки нет (Все метки)

Суть задачи: Пользователь вводит длину числа( не больше 10) и Систему счисления( не больше 16) , наша программа должна вывести количество "Выиграшных билетов", билет выиграшный, если сумма цифр в парных и не парных позициях совпадает. Нет проблемы как посчитать суммы, но я не могу сделать перебор варианта каждой длины в каждой системе счисления =/
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2015, 17:41
Ответы с готовыми решениями:

Перевод чисел из 10-ой системы счисления в 2-ую
Написал я код который рандомно генерирует 5 чисел и переводит их из 10 системы...

Перевод чисел из 10-ой системы счисления в 2-ую
Нужно написать программу для перевода чисел из 10-ой системы счисления в 2-ую....

Перевод чисел в разные системы счисления
Нужна программа, которая переводит число с 10 системы счисления в n степень...

Перевод чисел с 10 системы счисления в - 2ASCII
написать программу где число из 10 системы счисления переводит в двоичную и...

Перевод чисел в различные системы счисления
Всем доброе время суток) Есть задача: На входе строка с числом в...

9
Байт
Эксперт C
18956 / 12168 / 2542
Регистрация: 24.12.2010
Сообщений: 24,815
21.10.2015, 17:59 2
Как-то так.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char a[10]; 
int L;  // Длина
int N; // Система счисления.
for(i=0; i<L; i++) a[i] = 0;
while(1) {
  if (a[L-1] < N-1) a[N-1]++;
  else {
     for(i=L-2; i>=0; i--) {
       if (a[i] == N-1) continue;
       a[i] ++;
       for(j=i+1; j<L; j++) a[i] = 0;
       break; 
     }
     if (i < 0) break;
  }
  // Анализ очередного числа 
}
Не проверял.
В основу алгоритма положена операция прибавления 1 столбиком
0
MyChoice
9 / 9 / 7
Регистрация: 08.05.2015
Сообщений: 52
21.10.2015, 18:46  [ТС] 3
Не работает, с цикла не выходит

Добавлено через 36 минут
Ещё проблема в том, что надо как-то учесть Буквы при системе выше 10 до 16
0
Байт
Эксперт C
18956 / 12168 / 2542
Регистрация: 24.12.2010
Сообщений: 24,815
21.10.2015, 19:10 4
Цитата Сообщение от Байт Посмотреть сообщение
if (a[L-1] < N-1) a[N-1]++;
Строчка 16 должна быть
C
1
if (a[L-1] < N-1) a[L-1]++;
Цитата Сообщение от MyChoice Посмотреть сообщение
Ещё проблема в том, что надо как-то учесть Буквы при системе выше 10 до 16
В представленном коде такой проблемы нет. Система счисления может быть до 127. А при использовании unsigned char до 255
0
MyChoice
9 / 9 / 7
Регистрация: 08.05.2015
Сообщений: 52
21.10.2015, 19:32  [ТС] 5
Не совсем понял первую часть Вашего сообщения, где говорим о 16 строке, и 2 строки с кода, можете обьяснить? А то я поменял Строку, которую Вы дали как цитаты, на вашу новую строку, всеравно зациклилось =( Видимо я вас где-то не понял
0
Байт
Эксперт C
18956 / 12168 / 2542
Регистрация: 24.12.2010
Сообщений: 24,815
21.10.2015, 19:42 6
Лучший ответ Сообщение было отмечено MyChoice как решение

Решение

Цитата Сообщение от MyChoice Посмотреть сообщение
Видимо я вас где-то не понял
Даю весь исправленный код (ошибка была в строке 6)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char a[10]; 
int L;  // Длина
int N; // Система счисления.
for(i=0; i<L; i++) a[i] = 0;
while(1) {
  if (a[L-1] < N-1) a[L-1]++;
  else {
     for(i=L-2; i>=0; i--) {
       if (a[i] == N-1) continue;
       a[i] ++;
       for(j=i+1; j<L; j++) a[j] = 0;
       break; 
     }
     if (i < 0) break;
  }
  // Анализ очередного числа 
}
По ходу нашел еще одну ошибочку в строке 11
А вам могу посоветовать не переписывать тупо данный вам код (тем более непроверенный), а подойти к нему, как к рекомендации, и попытаться разобраться, что же именно вам предлагают.
1
MyChoice
9 / 9 / 7
Регистрация: 08.05.2015
Сообщений: 52
21.10.2015, 19:51  [ТС] 7
Цитата Сообщение от Байт Посмотреть сообщение
Даю весь исправленный код (ошибка была в строке 6)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char a[10]; 
int L;  // Длина
int N; // Система счисления.
for(i=0; i<L; i++) a[i] = 0;
while(1) {
  if (a[L-1] < N-1) a[L-1]++;
  else {
     for(i=L-2; i>=0; i--) {
       if (a[i] == N-1) continue;
       a[i] ++;
       for(j=i+1; j<L; j++) a[j] = 0;
       break; 
     }
     if (i < 0) break;
  }
  // Анализ очередного числа 
}
По ходу нашел еще одну ошибочку в строке 11
А вам могу посоветовать не переписывать тупо данный вам код (тем более непроверенный), а подойти к нему, как к рекомендации, и попытаться разобраться, что же именно вам предлагают.
С кодом разобрался! Спасибо! Я понял, что нет нужды использовать буквы, если мне нужно просто вывести количество, кроме того, мы просто цифру выше 10 записываем в определенную ячейку, единственное, что я поменял, это изменил массив с типа чар к типу инт, мне показалось, если оставить тип чар, то тогда подсчет при системы счисления будет выше 10, то что-то пойдет не так, так как там коды символов АСКИ и т.д., поправьте меня, если я не прав
0
Байт
Эксперт C
18956 / 12168 / 2542
Регистрация: 24.12.2010
Сообщений: 24,815
21.10.2015, 20:00 8
Цитата Сообщение от MyChoice Посмотреть сообщение
мне показалось, если оставить тип чар, то тогда подсчет при системы счисления будет выше 10, то что-то пойдет не так, так как там коды символов АСКИ и т.д.,
Не. Там не коды цифр, а числовые значения цифр. В char тоже можно хранить числа, только ма-а-а-ленькие. Но использование массива интов - это правильно и грамотно. Однако, если массивы большие, а значения в них не велики (0-255), можно использовать unsigned char. Экономия памяти в 2-4 раза.
0
MyChoice
9 / 9 / 7
Регистрация: 08.05.2015
Сообщений: 52
21.10.2015, 20:04  [ТС] 9
Цитата Сообщение от Байт Посмотреть сообщение
Не. Там не коды цифр, а числовые значения цифр. В char тоже можно хранить числа, только ма-а-а-ленькие. Но использование массива интов - это правильно и грамотно. Однако, если массивы большие, а значения в них не велики (0-255), можно использовать unsigned char. Экономия памяти в 2-4 раза.
Вас понял, благодарю за помощь, теперь надо что-то оттуда подогнать в рекурсию, но это уже должен сделать сам)! Ещё раз спасибо!
0
Байт
Эксперт C
18956 / 12168 / 2542
Регистрация: 24.12.2010
Сообщений: 24,815
21.10.2015, 20:13 10
MyChoice, но если вопрос только в том, чтобы посчитать количество счастливых билетов, то мне кажется, что этот вопрос можно решить чисто математически, комбинаторно. Если это действительно так, то можно переформулировать задачу и задать вопрос в разделе Математика - Комбинаторика. Впрочем, если это упражнение в программировании... - упражняйтесь на здоровье!
0
21.10.2015, 20:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2015, 20:13

Перевод чисел из одной системы счисления в другую
Здравствуйте, уважаемые форумчане. Нужна помощь, имеется программа по переводу...

Конверсия чисел из одной системы счисления в другую
Релиазовать программу которая будет конвертировать числа между двумя системами...

Перевод чисел из одной системы счисления в другую
Задание: Написать программу на языке С для перевода числа, представленного в...


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

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

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