С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
44 / 41 / 35
Регистрация: 27.02.2013
Сообщений: 284
1

В числе удалить повторяющуюся цифру

01.04.2013, 00:27. Показов 1593. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно в числе удалить повторяющуюся цифру. Помогите найти ошибку в функции:
C
1
2
3
4
5
6
7
8
9
10
for(j=0;j<k;j++) //к - количество цифр в числе
            {
                g=j;
                for(d=j+1;d<k;d++)
                    if(arr[d]==arr[g])
                    {
                        arr[d]=arr[d+1];
                        k--;
                    }printf("%d ", arr[j]);
            }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.04.2013, 00:27
Ответы с готовыми решениями:

Написать функцию, которая в заданном натуральном числе n заменяет младшую цифру на цифру 9
Задача: Написать на языке С функцию, которая в заданном натуральном числе n заменяет младшую цифру...

Возвести во введенном натуральном числе каждую цифру в степень, соответствующую ее позиции в числе
Помогите, каким образом это можно сделать? Возвести во введенном натуральном числе каждую цифру...

Найти наиболее повторяющуюся цифру в числе
Имеется число например 333456, найти наиболее повторяющееся число (число тут в данном случае будет...

Найти наиболее часто повторяющуюся цифру в числе
Дано натуральное число. Определить наиболее часто повторяющуюся в нем цифру и указать ее позиции в...

7
Невнимательный
2778 / 1109 / 347
Регистрация: 08.02.2013
Сообщений: 6,339
Записей в блоге: 2
01.04.2013, 10:18 2
не совсем понятно каким образом перезаписывается весь остаток строки, при нахождении совпадений.
здесь где-то похожее видел с использованием memmove
C
1
2
#include <string.h>
void *memmove(void *to, const void *from, size_t count);
// или я не понял как представлена строка

Добавлено через 3 минуты
или число совсем не нужно переводить в строку
0
44 / 41 / 35
Регистрация: 27.02.2013
Сообщений: 284
01.04.2013, 11:10  [ТС] 3
на выходе нужно получить число без повторяющихся цифр. Алгоритм такой: я разбиваю число на цифры и заношу в массив. Потом прохожу по массиву и если цифра повторяется, сдвигаю массив влево. Просто если в числе совпадают 1 и 2 цифры, на выходе я теряю последнюю. в остальных случаях функция работает.
0
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
01.04.2013, 14:31 4
суть в том, что в вашей функции длина числа (k) уменьшается несколько раз за цикл, и ошибка будет возникать не тогда когда совпадают первая и вторая цифры, а в тех случаях, когда повторяющаяся цифра будет находится хотя бы в разряде сотен. Для наглядности покажу как работает ваша функция с числом, допустим 115430 пошагово:
1. 115430
2. 15543
3. 1544
4. 154
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
01.04.2013, 14:46 5
Цитата Сообщение от Lar4ik Посмотреть сообщение
на выходе нужно получить число без повторяющихся цифр
Если "число" в unsigned int помещается:
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
#include <stdio.h>
 
unsigned reverse_number(unsigned num) {
    unsigned ret;
    
    for ( ret = 0; num; ret = ret * 10 + num % 10, num /= 10 )
        ;
    
    return ret;
}
 
unsigned unique_digits(unsigned num) {
    unsigned ret, digit;
    char digits[10] = { 0 };
    
    for ( ret = 0; num; num /= 10 ) {
        digit = num % 10;
        if ( ! digits[digit] ) {
            digits[digit] = 1;
            ret = ret * 10 + digit;
        }
    }
    
    return ret;
}
 
int main(void) {
    unsigned n;
    
    while ( printf("Number: ") && scanf("%u", &n) == 1 )
        printf("Result: %u\n", unique_digits(reverse_number(n)));
    
    return 0;
}
0
44 / 41 / 35
Регистрация: 27.02.2013
Сообщений: 284
02.04.2013, 18:26  [ТС] 6
easybudda, т.е. моя функция безнадежна? Мне бы подкорректировать мой кусок, так как сама программа очень объемная.

Добавлено через 21 час 31 минуту
Ну хоть кто-нить подскажите. Уже два дня бьюсь, ничего не выходит.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
02.04.2013, 18:52 7
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Lar4ik, да Вам уж и ошибки указали, и работающий вариант дали, а Вы всё бьётесь... Вот Вам строковый вариант (удаляет все повторные вхождения символа в строку, будь они буквы, цифры или точки с запятыми)
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
#include <stdio.h>
#include <string.h>
 
char * unique_letters(char * s) {
    char * current, * found;
    
    for ( current = s; *current != '\0'; ++current )
        for ( found = strchr(current + 1, *current); found != NULL; found = strchr(found, *current) )
            memmove(found, found + 1, strlen(found));
    
    return s;
}
 
typedef char string_t[256];
#define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 )
 
int main(void) {
    string_t str;
    
    while ( printf("String: ") && get_string(str) )
        printf("Result: %s\n", unique_letters(str));
    
    return 0;
}

Не по теме:

Название у функции не совсем удачное

0
44 / 41 / 35
Регистрация: 27.02.2013
Сообщений: 284
02.04.2013, 21:32  [ТС] 8
Всем спасибо. Все получилось.
0
02.04.2013, 21:32
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.04.2013, 21:32
Помогаю со студенческими работами здесь

Удалить в записи числа цифру, повторяющуюся максимальное число раз
Удаляет в записи числа цифру, повторяющуюся максимальное число раз, получая новое число;

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

Найти самую повторяющуюся цифру в массиве цифр
Дано N чисел и N цифр. Напишите программу которая находит самую повторяющуюся цифру в массиве . ...

В строке символов найти наиболее часто повторяющуюся цифру
В строке символов, введенных в StringGrid(1строка), найти наиболее часто повторяющуюся цифру я...

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

Удаляет в записи числа цифру, повторяющуюся нечетное количество раз
Написать программу, которая удаляет в записи числа цифры, повторяющиеся нечетное количество раз....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на Go/Golang
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C#
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru