1

Тема: Дано натуральне число n. C#

Привіт всім. Дано натуральне число n. Перевірити, чи можна подати n! у вигляді добутку трьох послідовних цілих чисел. Ось таке завдання, код я написав але він працює неправильно. Допоможіть виправити або запропонуйте свій код. Допоможіть.

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int iNum;
            int i;
            Console.WriteLine("Введіть натуральне число");
            iNum = Convert.ToInt32(Console.ReadLine());
            iNum = Math.Abs(iNum);
            if (iNum >= 2)
            {
                for (i = 2; i <= iNum; i++)
                {
                    if(i%2 != 0) {
                        if(i%3 != 0) {
                            if(i%5 == 0)
                                Console.WriteLine("\n"+i);
                        }
                        else Console.WriteLine(i);
                    }
                    else Console.WriteLine(i);
                }
            }
            else Console.WriteLine("Чисел не знайдено");
        }
    }
}

2

Re: Дано натуральне число n. C#

проблема в коді, чи в алгоритмі? бо тут потрібні мінімальні знання  c#, головне - алгоритм.

тут спілкуються українці (серед них є програмісти)
https://discord.gg/Zk29v4P
Подякували: koala1

3

Re: Дано натуральне число n. C#

Ну в коді все добре він компілюється. Але напевне вся проблема в алгоритмі. Чи не могли б Ви запропонувати свій варіант коду. Бо я переробляв код з С#.

4

Re: Дано натуральне число n. C#

Це код.С++

#include <conio.h>
#include <math.h>
#include <iostream.h>

void main(void)
{
    int iNum; // Змінна для натурального числа
    int i; // Лічильник
    clrscr();

    // Вводимо натуральное число
    cout << " Введіть натуральне число: ";
    cin >> iNum;

    // Якщо введено від'ємне то беремо
    // абсолютне значення числа
    iNum = abs(iNum);

    // Шукаємо числа, які діляться на:
    // 2 або 3 або 5 і виводимо на екран
    if(iNum >= 2)
    {
        for(i = 2; i <= iNum; i++)
        {
            if(i % 2 != 0) {
                if(i % 3 != 0) {
                    if(i % 5 == 0)
                        cout << i << "\n";
                }
                else cout << i << "\n";
            }
            else cout << i << "\n";
        }
    } else cout << "Чисел не найдено!\n";
}

5 Востаннє редагувалося koala (18.09.2016 22:16:49)

Re: Дано натуральне число n. C#

Воу-воу-воу. Полегше.
У вас є задача. Скажімо так - нетривіальна. Мені, як диломованому інженеру-математику, одразу не спадає на думку її розв'язок, треба подумати.
У вас є код.

неполіткоректне
Якщо цей код писали не ви - ідіть геть звідси, це форум програмістів, а не плагіаторів.

Добре, є ваш код. Він працює, як ви кажете, "неправильно". Ви можете якось підтвердити свої слова? Навести приклад даних, при яких він дійсно працює неправильно? Може, це ви неправильно сприйняли його роботу як "неправильну"?

Ну в коді все добре він компілюється.

Дуже смішно.

Але напевне вся проблема в алгоритмі.

Можете описати алгоритм, за яким він має працювати? Бажано з поясненнями, чому цей алгоритм має розв'язувати вашу задачу. Можна не розписувати, ми розберемося.

Чи не могли б Ви запропонувати свій варіант коду.

Для початку треба з алгоритмом розібратися.

Подякували: FakiNyan, leofun012

6

Re: Дано натуральне число n. C#

Перевірив - від 3 до 6 є, від 7 до 19 нема, далі треба доводити. Підозрюю, що достатньо буде перевірити, що число між 3 і 6, але доказу поки не маю.

Подякували: FakiNyan, leofun012

7

Re: Дано натуральне число n. C#

Перевірив до 24 включно. Нема.

8

Re: Дано натуральне число n. C#

Щось ніяких міркувань, крім статистичних, в голову не лізе, а 6! являє собою виняток з усіх статистичних закономірностей, які я можу придумати, чим особливо дражнить: якщо є один виняток, то цілком можуть бути і інші.

Подякували: leofun011

9

Re: Дано натуральне число n. C#

Бачу два варіанти: або обмежити n, щоб double вміщав всі знаки n!, або ж довга арифметика. Який вам годиться - той і реалізовуйте.

10

Re: Дано натуральне число n. C#

перевірив до 1000, тільки !3 і !4 підходе

це бідон, але мона легко переписати на c#

import math

for i in range(1,1000):
    f = math.factorial(i)
    for j in range(1,i):
        first = j
        second = j+1
        third = j+2
        allThree = False
        if second<=i:
            j=j*second
        if third<=i:
            j=j*third
            allThree=True
        if j==f and allThree:
            print("!{} fact: {}  {}*{}*{}".format(i,f, first, second, third))

http://puu.sh/rgjJ0/6bc6923080.png

але тут суть в тому, що спершу йде одиничка, котра нічого не вирішує

тут спілкуються українці (серед них є програмісти)
https://discord.gg/Zk29v4P

11

Re: Дано натуральне число n. C#

5!=4*5*6=120
У вас бідон протікає.

Подякували: FakiNyan, leofun012

12

Re: Дано натуральне число n. C#

Ось вам робочий (в певних межах) бідон:

fact = 1
root = 1
for i in range(1,1000):
    fact *= i
    root *= i**(1./3.)
    introot = int(root)
    if fact == introot*(introot+1)*(introot+2):
        print("%d!=%d=%d*%d*%d"%(i,fact,introot,introot+1,introot+2))
    else:
        print("%d fails"%i)

13

Re: Дано натуральне число n. C#

koala написав:

Перевірив - від 3 до 6 є, від 7 до 19 нема, далі треба доводити. Підозрюю, що достатньо буде перевірити, що число між 3 і 6, але доказу поки не маю.

Півдня задача крутилась в голові в фоновому режимі, тепер наче розв’язалась.

За умовою, n! = (x - 1)*x*(x + 1) = x*(x² - 1), отже x ≤ n. Тоді добуток всіх чисел, що залишились, дорівнює x² - 1. Але x - 1 теж входить до факторіалу, тому добуток всіх чисел, крім цих двох, має дорівнювати x + 1. Тому максимальне n обмежує рівняння n + 1 ≤ (n - 2)!, яке перестає справджуватись при n ≥ 6.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

14

Re: Дано натуральне число n. C#

quez написав:

За умовою, n! = (x - 1)*x*(x + 1) = x*(x² - 1), отже x ≤ n.

З чого б це? n! зростає дуже швидко, n!**1/3 також, x швидко обганяє n. Наприклад,
6!=8*9*10, n=6, x=9.

Подякували: leofun01, quez2