Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

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

Ответ
 
Опции темы
Старый 31.01.2017, 11:46   #1
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 110
Репутация: 10
По умолчанию Перевести на C#/C++

Здравствуйте, может есть тут люди знающие и Python и C#/C++. Очень нужно перевести код.
Код:

+# Требуется написать программу, которая определит количество несчастливых N-значных номеров(номером 561743 счастливый,
# так как 5+1+4+3=6+7), которые можно составить, используя цифры от 0 до K. В номерах допускается любое количество ведущих нулей.
# Входные данные: два целых числа N и K (1 <= N <= 100, 1 <= K <= 9, N*K <= 300).
# Выходные данные: количество несчастливых номеров для заданных N и K.

import time

luckysum = 0

#Подсчет всех счастливых подмножеств
def LuckyNumGen(n, mi, fk, num,farr,isum,N,K):
    
    if n == N:
        if fk & 1:
            return
        for i in range(0,(fk + 1)):
            isum[i] = 0 
        isum[0] = 1
        s = 0
        for i in range (0,N):
            if isum[fk // 2]:
                break
            for j in range (s,-1,-1):
                if isum[j]:
                    isum[j + num[i]] = 1
            s += num[i]
        if isum[fk // 2]:
            tmp = 1
            rest = N
            for i in  range (0,(K + 1)):
                for j in range (0,farr[i]):
                    tmp = tmp * rest
                    rest-=1
                    tmp //= j + 1
            global luckysum
            luckysum += tmp
        return
    for i in range(mi,K + 1):
        num[n] = i
        farr[i] += 1 
        LuckyNumGen(n + 1, i, fk + i,num,farr,isum,N,K)
        farr[i] -= 1

#Проверка корректности ввода
def InputCheck():
    while 1:
        tmp = input()
        try:
            tmp = int(tmp)
            break
        except ValueError:
            print ("\nВы ошиблись! Попробуйте снова.\n")
    return tmp

def main():
    t1 = time.time()
    N = 0
    K = 0
    MAXN = 100
    MAXK = 9
    MAXSUM = 1000
    num = [0 for i in range(MAXN)]
    farr = [0 for i in range(MAXK+1)]
    isum = [0 for i in range(MAXSUM)]
    while N*K > 300 or N*K == 0:
        print("Введите целые числа N и К, по условию 1<= N <=100  1<= K <=9  N*K<=300 \n")
        while (N < 1) or (N > 100):
            print("Введите целое число N 1<= N <=100: ")
            N = InputCheck()
        while (K < 1) or (K > 9):
            print ("Введите целое число K 1<= K <=9: ")
            K = InputCheck()
        if (N*K > 300):
            print("\nВы привысили диапозон. Повторите ввод\n")
            N = 0
            K = 0
    LuckyNumGen(0, 0, 0, num,farr,isum,N,K);
    comb = pow(K + 1, N)
    print("Число размещений с повторением из k по n: ", comb)
    print("Число счастливых сочетаний: ", luckysum)
    print("Число несчастливых сочетаний: ", comb - luckysum)
    print("Время выполнения программы: ", time.time() - t1)
if __name__ == "__main__": 
    main()


Последний раз редактировалось Kef1r; 31.01.2017 в 12:13.
Kef1r вне форума   Ответить с цитированием
Старый 31.01.2017, 11:57   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,010
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от Kef1r Посмотреть сообщение
может есть тут люди знающие и Phyton и C#/C++
Полно.

Цитата:
Сообщение от Kef1r Посмотреть сообщение
Очень нужно перевести код.
Зачем?
Alex11223 вне форума   Ответить с цитированием
Старый 31.01.2017, 12:09   #3
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 110
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Зачем?
Нужна эта задача на C#/C++. Требование преподавателя. Да и не разберусь я в ней на Python'e, т.к. его совсем не изучал.

Последний раз редактировалось Kef1r; 31.01.2017 в 12:12.
Kef1r вне форума   Ответить с цитированием
Старый 31.01.2017, 12:14   #4
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,010
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Задача заключалась в поиске и переписывании готового решения?


Цитата:
Сообщение от Kef1r Посмотреть сообщение
Да и не разберусь я в ней на Phyton'e, т.к. его совсем не изучал.
Изучить синтаксис языка несложно, за пару дней (а то и меньше) основы без проблем осилить можно.
Тут ж просто функции, циклы, арифметические операции, ввод/вывод.
Alex11223 вне форума   Ответить с цитированием
Старый 31.01.2017, 12:25   #5
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 110
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Задача заключалась в поиске и переписывании готового решения?
В поиске, переписывании и разбирании задачи. Сам сделать не могу.
Kef1r вне форума   Ответить с цитированием
Старый 31.01.2017, 18:17   #6
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 110
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Тут ж просто функции, циклы, арифметические операции, ввод/вывод.
Пришел домой. Чет поковырял немного и загнулся на третьем цикле(Что это такое? for j in range (s,-1,-1)). Может быть пощадите меня и переведете по-быстренькому? Я буду вам очень благодарен.
Kef1r вне форума   Ответить с цитированием
Старый 31.01.2017, 18:31   #7
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,010
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

https://docs.python.org/2/library/functions.html#range
range(start, stop[, step])
Alex11223 вне форума   Ответить с цитированием
Старый 31.01.2017, 18:54   #8
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 110
Репутация: 10
По умолчанию

Да, т.е. к примеру на C# это будет выглядеть так: for(int j=0;j<s;j--); (s(j<s),-1(j--),-1) Последняя -1 к чему вообще?
Kef1r вне форума   Ответить с цитированием
Старый 31.01.2017, 19:10   #9
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,010
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

s это начало.
От s до 0 (включительно) с шагом -1
Alex11223 вне форума   Ответить с цитированием
Старый 31.01.2017, 20:11   #10
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 110
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
s это начало.
От s до 0 (включительно) с шагом -1
Спасибо. Вроде как перевел почти полностью, ужасно конечно, потому как не знаю, есть ли в C# аналоги time.time(). И что значит "return". Т.е. return же должен что-то возвращать, что значит просто return без понятия. И еще "//" заменял "/" - это верно?
Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
      
      static  int luckysum = 0;
        public static int LuckyNumGen(int n, int mi, int fk, int[] num, int[] farr, int[] isum, int N, int K) {
            
            if (n == N)
            {
                return 0; //Что-то не то
            }
            for (int i = 0; i < fk+1; i++)
            {
                isum[i] = 0;
            }
            isum[0] = 1;
           int  s = 0;
            for (int i = 0; i < N; i++)
            {
                if (isum[fk / 2] == 0)
                {
                    break;
                }
            
                for (int j = s; j > -1; j--)
                {
                    if (isum[j] != 0)
                    {
                        isum[j+num[i]] = 1;
                    }
                    s += num[i];
                }
            }
                if (isum[fk / 2] == 0)
                {
                    int tmp = 1;
                    int rest = N;
                    for (int i = 0; i < K + 1; i++)
                    {
                        for (int j = 0; j < farr[i]; j++)
                        {
                            tmp = tmp*rest;
                            rest -= 1;
                            tmp /= j + 1;
                        }
                    }

                luckysum += tmp;
                }
            return 0; //Что-то не то

            for (int i = mi; i < K + 1; i++)
            {
                num[n] = i;
                farr[i] += 1;
                LuckyNumGen(n + 1, i, fk + i, num, farr, isum, N, K);
                farr[i] -= 1;
            }

            return 0; //Что-то не то
        }

        static void Main(string[] args)
        {
            int t1=time.time(); //time.time
            int N = 0;
            int K = 0;
            int MAXN = 100;
            int MAXK = 9;
            int MAXSUM = 1000;
            int[] num = new int[MAXN];
            int[] farr = new int[MAXK+1];
            int[] isum = new int[MAXSUM];
            while ((N * K > 300) || (N * K == 0))
            {
                Console.WriteLine("Введите целые числа N и К, по условию 1<= N <=100  1<= K <=9  N*K<=300");
                while ((N < 1) || (N > 100))
                {
                    Console.WriteLine("Введите целое число N 1<= N <=100:");
                    N = Convert.ToInt32(Console.ReadLine());
                }
                while ((K < 1) || (K > 9))
                {
                    Console.WriteLine("Введите целое число K 1<= K <=9:");
                    K = Convert.ToInt32(Console.ReadLine());
                }

                if (N * K > 300)
                {
                    Console.WriteLine("Вы привысили диапозон. Повторите ввод");
                    N = 0;
                    K = 0;
                }
          
            }
            LuckyNumGen(0, 0, 0, num, farr, isum, N, K);
            double comb = Math.Pow(K + 1, N);
            Console.WriteLine("Число размещений с повторением из k по n: ", comb);
            Console.WriteLine("Число счастливых сочетаний: ", luckysum);
            Console.WriteLine("Число несчастливых сочетаний: ", comb - luckysum);
            Console.WriteLine("Время выполнения программы: ", time.time() - t1); //time.time
        }
    }
}


Последний раз редактировалось Kef1r; 31.01.2017 в 20:14.
Kef1r вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевести с С# на С marysluva Помощь студентам 3 03.01.2017 18:42
перевести в C# ~Леди~ C# (си шарп) 11 06.04.2011 23:22
Перевести с СИ++ на СИ stepanov_ivan Помощь студентам 1 03.01.2011 00:08
ПЕРЕВЕСТИ НА c++ daniil2010 Помощь студентам 1 20.04.2010 19:51


02:58.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru