Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2019, 14:07   #11
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

И? Где в условии N > 1?
p51x вне форума Ответить с цитированием
Старый 25.03.2019, 14:15   #12
niggainsoul
Пользователь
 
Регистрация: 25.03.2019
Сообщений: 10
По умолчанию

Тему по ссылке видел. Ответа там не нашел.
Сделал unsigned long long - не помогло
niggainsoul вне форума Ответить с цитированием
Старый 25.03.2019, 14:15   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
И? Где в условии N > 1?
больше или равно 1.

в исходной задаче (см. acmp 471)
сказано "Входной файл INPUT.TXT содержит натуральное число N"
ну и по логике:
"...программу, определяющую количество телефонных номеров длины N ..."
длина у нас всегда положительное число (или ноль, что, впрочем, отсекается ограничением - что на входе натуральное число)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.03.2019, 14:16   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от niggainsoul Посмотреть сообщение
не помогло
при n=1 у Вас ответ 8 ?!

и чему равен ответ при n=100 ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.03.2019, 14:21   #15
niggainsoul
Пользователь
 
Регистрация: 25.03.2019
Сообщений: 10
По умолчанию

После изменения условия на if (i != '8') show(string(1, i)); ответ стал 8. При 100 не знаю, долго ждать.
niggainsoul вне форума Ответить с цитированием
Старый 25.03.2019, 14:49   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от niggainsoul Посмотреть сообщение
При 100 не знаю, долго ждать.
ну так на acmp.ru задача вывалится по "time limit"...

кстати, я бы тоже решал подобную задачу через рекурсию.
но, умные люди пишут, что эта задача на динамическое программирование и, соответственно, должна решаться через динамику.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.03.2019, 14:52   #17
niggainsoul
Пользователь
 
Регистрация: 25.03.2019
Сообщений: 10
По умолчанию

Этот код проходит, но я не очень понимаю его((
Код:
#include <iostream>
using namespace std;
void sum(int *a, int *b, int *c, int *n)
{
	int i, t;
	for (i = t = 0; i < *n + 3; i++)
	{
		t += a[i] + b[i];
		c[i] = t % 10;
		t /= 10;
	}
	*n += 3;
	while (!c[*n])
		--*n;
}
int d[20][200][200], s[200], n, i, j, l, m, p[20][5] = { {2,4,6},{2,6,8},{2,7,9},{2,4,8},{3,0,3,9},{0},{3,0,1,7},{2,2,6},{2,1,3},{2,2,4} };
int main()
{
	
	int n;
	for (i = 0; i < 10; i++)
		d[i][0][0] = 1;
	cin >> n;
	for (i = 1; i < n; i++)
		for (j = 0; j < 10; j++)
			for (d[j][i][0] = l = 0; l < p[j][0]; l++)
			{
				m = 100;
				sum(d[j][i], d[p[j][l + 1]][i - 1], d[j][i], &m);
			}
	for (m = 100, i = 1; i < 10; i++)
		if (i != 8)

			sum(s, d[i][n - 1], s, &m);
	for (i = m; i >= 0; i--)
		cout << s[i];
	return 0;
}
niggainsoul вне форума Ответить с цитированием
Старый 25.03.2019, 14:52   #18
niggainsoul
Пользователь
 
Регистрация: 25.03.2019
Сообщений: 10
По умолчанию

Проще повеситься
niggainsoul вне форума Ответить с цитированием
Старый 25.03.2019, 15:02   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Проще повеситься
Само собой, только веревка или заменитель нужен и даже без мыла. И мозги не нужно включать, почти. А тут нужно и очень )
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.03.2019, 13:19   #20
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

Если интересно динамическое программирование то вот набросал код.
Правда набросал на C# при желании можно перевести на C++

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp11
{
    class Program
    {
        static int[][] AvailableSteps = 
        {
            new int[] { 4,6 }, //Список кнопок откуда можно попасть на кнопку 0
            new int[] { 6,8 }, //Список кнопок откуда можно попасть на кнопку 1
            new int[] { 7,9 }, //Список кнопок откуда можно попасть на кнопку 2
            new int[] { 4,8 }, //Список кнопок откуда можно попасть на кнопку 3
            new int[] { 3,9 }, //Список кнопок откуда можно попасть на кнопку 4

            new int[] { }, //Список кнопок откуда можно попасть на кнопку 5
            new int[] { 1,7 }, //Список кнопок откуда можно попасть на кнопку 6
            new int[] { 2,6 }, //Список кнопок откуда можно попасть на кнопку 7
            new int[] { 1,3 }, //Список кнопок откуда можно попасть на кнопку 8
            new int[] { 2,4 }, //Список кнопок откуда можно попасть на кнопку 9
        };
        // Расположение кнопок на клавиатуре
        //
        //      1 2 3
        //      4 5 6
        //      7 8 9
        //        0
        //
        static void Main(string[] args)
        {
            
            //В переменной Current находиться количество способов которыми можно попасть на данную кноку на текущем шаге
            long[] current = new long[10] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; //Список разрешённых для старта цифр (если 1 то соответсвующая цифра разрешена для старта)
            int n = 6;

            for (int i=2;i<=n;i++)
            {
                long[] next = new long[10];
                for (int j = 0; j < 10; j++)

                    //Расчитываем сколько различных вариантв номеров длиной i цифр может заканчиваться цифрой j
                    foreach (var t in AvailableSteps[j])
                        next[j] += current[t];
                current = next;
            }
            Console.WriteLine(current.Sum());
            Console.ReadLine();
        }
    }
}
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен сборщик телефонных номеров из Excel. Интеко Microsoft Office Excel 9 28.02.2018 17:29
Сохранение нескольких телефонных номеров клиента Xezon Общие вопросы по программированию, компьютерный форум 3 22.05.2016 11:56
Ходом коня обойти шахматную доску NхM Рон99 Паскаль, Turbo Pascal, PascalABC.NET 2 02.11.2011 17:17
Импорт телефонных номеров из excel в access jen9tko Microsoft Office Access 0 08.11.2010 15:34
БД телефонных номеров ElenaOrsk Общие вопросы Delphi 0 31.05.2009 12:25