Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Mcray
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 36
#1

Как дорешать задачу? - C++

11.04.2012, 17:02. Просмотров 379. Ответов 6
Метки нет (Все метки)

«Найди серединку»
Вводятся натуральные числа - А и В (А<В), которые не превышают 100000000. Найти число Х – середину ряда, состоящего из всех цифр из чисел от А до В записанных подряд, для этого нужно: записать подряд все числа от А до В (включительно), найти в полученном ряду цифру или число из двух цифр (это зависит от четности или нечетности количества цифр в ряду), стоящие ровно посредине ряда. (Пример: для А=98, В=103, в ряду от 98 до 103 будет записано 16 цифр, средними (8-й и 9-й) цифрами будут 10 ).
Ввод: число К.
Вывод: ответ.
Пример:
Ввод: 98

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

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
#include <tchar.h>
#include <math.h>
#include <windows.h>
#include <iostream.h>
//---------------------------------------------------------------------------
 
int Raz(int Chislo2){//колличество цифр в числе
int k=0;
        while(Chislo2!=0){
            Chislo2=Chislo2/10;
            k++;
        }
return k;
}
int Kol(int Chislo){//количество цифр до введённого
 
 int kol=0;
 int Chislo1=Chislo;
 int k = Raz(Chislo1);
 
 int s = 1;
 for(int i=1;i<k;i++)
 {
   kol+=9*s*i;
   s*=10;
 }
 Chislo1 = Chislo-s+1;
 kol+=Chislo1*k;
    // 9899100101102103104
     //9+89*2 = 187
     //9+90*2+3*4 = 201
     //100101102103
 return kol;
}
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
SetConsoleOutputCP(1251);
int a,b,SearchChislo;
cin>>a;
cin>>b;
    if(a==b || a>b){
        cout<<"Не правильный ввод (Долно быть a,b>0; a<b; a!=b)!!!\n";
    }else{
int rez = (Kol(b)-Kol(a))+Raz(a);
        int S = Raz(a);
        for(long i = a;i<b;i++){
            S = S + Raz(i);             \
            if(S>=rez/2){                | 
             SearchChislo = i+1;       | поиск нужного числа.
             break; }                     /
        }
            if(rez%2 == 0){
        cout<<"чётное\n";
        cout<<"Search = "<<SearchChislo<<endl;
        cout<<"S = "<<S<<endl;
    }else{
        cout<<"не чётное\n";
        cout<<"Search = "<<SearchChislo<<endl;
        cout<<"S = "<<S<<endl;
    }
cout<<rez<<endl;
cout<<Kol(a)<<endl;
cout<<Kol(b)<<endl;
}
    system("pause");
    return 0;
}
//---------------------------------------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2012, 17:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как дорешать задачу? (C++):

как изобразить декартову систему координат ?немогу дорешать задачку - C++
Задана окружность, с помощью координат центра и радиуса. Вывести в декартовой системе координат (x и y от -1000 до 1000) как задать...

указатели с++, дорешать) - C++
Пожалуйста, помогите дорешать задачку: SuperSum функция, найденная из: • SuperSum(0 , n) = n, для положительных n. • SuperSum(k ,...

Задачка на динамический список. Помогите дорешать - C++
Создать список, заполнив его n числами вида: 5, 10, 15, 20, 25, ... С помощью функции вывести список на экран. Вставить значение x,...

Вычислить функцию f(x), используя ее разложение в степенной ряд (дорешать) - C++
Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в трех случаях: ...

как написать задачу в си - C++
как написать задачу в си

Как выполнить задачу с++ - C++
Для данного вещественного x найти значение следующей функции f, принимающей вещественные значения -x, если x &lt;= 0, f (x)...

6
voral
498 / 478 / 82
Регистрация: 16.03.2008
Сообщений: 2,248
11.04.2012, 17:39 #2
Примерный алгоритм:
1. создаем массив char* line;
2. В него заносим цифры от А до Б
т.е. для вашего пример line[0]='9'; line[1]='8'; ..... line[n-2]='1';line[n-1]='0';line[n]-'3';
3. Работаем с индексами и размерностями. Делим размер полчившегося массиыва пополам. И в зависимости от четности / нечетности выдаем два или один элемент по индексу.
0
Mcray
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 36
12.04.2012, 09:08  [ТС] #3
А мне нужно чтобы без массивов как то и я из-за этого и незнаю как(
0
voral
498 / 478 / 82
Регистрация: 16.03.2008
Сообщений: 2,248
12.04.2012, 09:32 #4
хм.
вчера чего то не подумал - с массивом тоже будет не красиво: памяти сожрет если задать 1 и 100000000.

А так может даст толчок:
1.
Цитата Сообщение от Mcray Посмотреть сообщение
я нахожу число в котором и будет искомая моя серединка ,
их может быть два
2.
Выделяем каждую цифру из числа
C
1
2
    int i = 153;
    printf("%d %d %d", (i % 1000 ) / 100, (i % 100 ) / 10, (i % 10 ) / 1);
0
Mcray
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 36
12.04.2012, 10:13  [ТС] #5
Да их может быть 2 если числа одной размерности и четные.
И вот эта середина по числам качет когда разные варианты и не могу определить закономерность или как там можно сделать вообще нет идей(.
0
voral
498 / 478 / 82
Регистрация: 16.03.2008
Сообщений: 2,248
12.04.2012, 11:10 #6
Тогда так. Начинаем с нулевых значений:

1. Добавляем очередное число (от А до Б включительно) (пример: 96)
1.1. Узнаем его длинну (2). Прибавляем к общей (0). (= 2)
1.2 Делим общую длинну пополам и выясняем что надо хранить два числа.
1.3 Делим длинну слова пополам и выясняем на сколько сдвигаются индексы (положение нужной цифры в сохранном числе)
1.4. Если оба индекса больше длинны сохранного ранее числа то увеличиваем сохранное число на 1 (если это первая итерация просто сохранеям А) и пересчитываем индексы
1.5. Запоминаем первое число содержащее искомые цифры(96)

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

Добавлено через 7 минут
Кстати, в общем то вам можно запоминать только первый индекс и первой число. А необходимость вывода второй цифры и ее расположение вычислять уже в самом конце:

C
1
2
3
4
5
6
если четное(общая длинна / 2) то 
      ++индекс;
      если индекс больше длинны сохраненого числа то
             ++сохраненое число
             индекс=1
      вывод цифры с индесом Индекс из Сохранного Числа
1
Mcray
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 36
12.04.2012, 11:23  [ТС] #7
Честно сказать немогу понять как это использовать в коде (
0
12.04.2012, 11:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2012, 11:23
Привет! Вот еще темы с ответами:

Как решить задачу? - C++
Вводим 8 городов, количество жителей, статус (мегаполис больше 25 тыс., город меньше 25 тыс., поселок городского типа до 5000). Вывести...

Как выполнить данную задачу на с++ ? - C++
Вычислить координаты точек пересечения кривых, заданных уравнениями y=(x+c) и ((pow((x/2),2))+(pow(y,2)))=1. Проверить результаты...

как cделать простую задачу на С++ - C++
Проверить, есть ли одинаковые цифры в смежных разрядах. (пожалуйста напишите код очень нужно, никогда на С++ не писал)

Как сделать задачу в С++. Список дежурных - C++
Вот сам задача: Список дежурных. Необходимо создать массив данных с фамилиями студентов. Массив должен заполняться с клавиатуры. Далее...


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

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

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