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

Подсчитывать количество цифр 2 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычисления с использованием подпрограмм, функции и процедуры http://www.cyberforum.ru/cpp-beginners/thread754326.html
Помогите пожалуйста!)) 1)Дважды вычислить значение выражения, первый раз используя процедуру, а второй - функцию. http://s020.***********/i704/1301/41/57860c703137.jpg
C++ Opengl и С++ для начинающего Приветствую всех! Можете пожалуйста подсказать хорошую книгу или видео урок по opengl и c++ для начинающего. Спасибо за ответы! ;) http://www.cyberforum.ru/cpp-beginners/thread754311.html
Разбить текст на страницы C++
Дан текстовый файл. Преобразовать его, разбив текст на страницы и пронумеровав их, причем номер нечетной страницы должен размещаться в правом нижнем углу, а номер четной страницы - в ее левом нижнем углу. Число стока странице задается, а ширина страницы определяется самой длинной строкой в данной странице. Конец страницы отмечается символом с кодом 12, который помещается в отдельной строке. ...
Как найти координаты точки на прямой удаленной от заданной точки на х C++
Добрый день! Помогите мне пожалуйста со следующей задачей. Дано 3 точки с координатами A(x1,y1), B(x2,y2), C(x3,y3) Нужно найти координаты точки D(x4,y4), которая лежит на прямой AB и удалена от точки С на 10. Два дня уже потратил на решение, но так и не добился результата. Спать по ночам уже не могу! :(
C++ игра змейка http://www.cyberforum.ru/cpp-beginners/thread754288.html
Здравствуйте! Знакомый попросил помощи, объяснить подробно как работает программа и как сделать разные уровни в игре. Но я не особо ее понимаю.. #include <allegro.h> void init(); void deinit(); void gene(int snakelong); void newgame(); int pause(); void miesto();
C++ Из данных точек перебрать все комбинации по 2 треугольника и проверить, принадлежит ли первый треугольник второму В общем пишу курсовую работу. Уже устал биться с ней... Вот задание: дано N точек, из них нужно перебрать все комбинации по 2 треугольника и проверить, принадлежит ли первый треугольник второму. Помогите... Вот код который я осилил, но не знаю как убрать проверку комбинаций треугольников, которые уже были мной проверены. #include <stdio.h> #include <math.h> float square(float m1, float n1,... подробнее

Показать сообщение отдельно
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,722
07.01.2013, 17:52     Подсчитывать количество цифр 2
короче доработал еще
Кликните здесь для просмотра всего текста
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <stdio.h>
 
 
#include <windows.h>// это только для замера времени 
#pragma comment (lib,"Winmm.lib")
 
int metod1(int N)
{
   int kvo = 0;
 
   for (int i = 0; i <= N; i++)
   {
       for (int j = i; j != 0; j /= 10)
          if (j%10 == 2) 
             kvo++;
   }
 
   return kvo;
}
 
int metod2(int N)
{
int n=N;
int kol2_1=0;
int kol2_2=0;
int kol2=0;
int kol_raz=0;
int tmp=1;
 if(n<2)
   return 0;
 
while(n>9)
{
 n/=10;
kol_raz++;
tmp*=10;
}
kol2_1=kol_raz;
for( int i=1;i<kol_raz;i++)
{
 kol2_1*=10;
}
 
for(int i=tmp;i<=N;i++)
  {
       for (int j = i; j != 0; j /= 10)
          if (j%10 == 2) 
             kol2_2++;
   }
 kol2=kol2_2+kol2_1;
return kol2;
}
 
 
 
 
int metod3(int N)
{
int n=N;
int kol2_1=0;
int kol2_2=0;
int kol2=0;
int kol_raz=0;
int factor=1;
 
while(n>9)
{
 n/=10;
kol_raz++;
factor*=10;
}
kol2_1=kol_raz;
for( int i=1;i<kol_raz;i++)
{
 kol2_1*=10;
}
 
 
 
n=N-factor;
int ofset=1;
while(n>factor)
{
 
if(ofset==2)
  {
   kol2_2+=factor;
  }
  kol2_2+=kol2_1; 
  ofset++;
  n-=factor;
 
}
 
for(int i=ofset*factor;i<=N;i++)
  {
    for (int j = i; j != 0; j /= 10)
          if (j%10 == 2) 
             kol2_2++;
   }
kol2=kol2_2+kol2_1;
return kol2;
}
 
 
int main()
{
int n= 10000000-1;
 
int t0=timeGetTime();
int n1=metod1(n);
int t1=timeGetTime()-t0;
 
t0=timeGetTime();
int n2=metod2(n);
int t2=timeGetTime()-t0;
 
t0=timeGetTime();
int n3=metod3(n);
int t3=timeGetTime()-t0;
 
printf("n= %d\n metod1 =%d  time %d \n metod2 =%d  time %d \n metod3 =%d  time %d \n",n,n1,t1,n2,t2,n3,t3);
system ("pause");
    return 0;
}



первый метод тупой перебор
второй подсчитываем до начала разряда потом перебор
третий подсчитываем до совпадения разряда потом перебор
т.е если взять число 9999(для этого алгоритма самый сложный вариант)
то первый метод цикл 0 до 9999
второй - 1000 до 9999
третий 9000 до 9999
вот временные параметры
Кликните здесь для просмотра всего текста
n=1000000000;
metod1 =900000000 time 176248
metod2 =900000000 time 0
metod3 =900000000 time 0

n= 999999999
metod1 =900000000 time 174380
metod2 =900000000 time 158050
metod3 =900000000 time 20105

n= 99999
metod1 =50000 time 0
metod2 =50000 time 13
metod3 =50000 time 0

n= 999999
metod1 =600000 time 100
metod2 =600000 time 90
metod3 =600000 time 10

n= 10000000
metod1 =7000000 time 1211
metod2 =7000000 time 0
metod3 =7000000 time 0

n= 9999999
metod1 =7000000 time 1220
metod2 =7000000 time 1117
metod3 =7000000 time 123

видно что второй метод иногда медленней n= 99999

окончательно от перебора не смог уйти, не смог нащупать формулу

Добавлено через 10 минут
Цитата Сообщение от diagon Посмотреть сообщение
В моей быдлореализации считает ответ для n = 10104 за секунду.
мой алгоритм тоже считает числа 10 в степени достаточно быстро (правда я до таких монстров не доходил)
а вот типа 99999999 уже медленно присутствует перебор от которого я не избавился
не смог угадать формулу по твоим исходникам, подскажи
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru