Melyik gyerek vette ki a zsákból a legtöbb diót?
Diótörő fejtörő. :-))
Először is lássuk, mi történik, ha egy számból kivonjuk a számjegyeinek összegét.
Legyen
N = 100a + 10b + c
S = a + b + c
A számjegyek összegét - (a+b+c) - kivonva
N1 = N - S = 99a + 9b = 9(11a + b)
N1 = 9(11a + b)
Ez osztható 9-cel, ez pedig csak akkor lehetséges, ha a számjegyeinek összege 9.
Mi történik a diókkal?
Négyen vesznek ki a zsákból,
az első menetben
Peti a + b + c
Jóska 9
Pista 9
Sanyi 9
darabot.
Ekkor N1 mennyiségű dió van a zsákban
A következő menetekben mindenki 9 darabot vesz ki,
összesen 3*4*9 = 108 darabot
Hozzávéve az első menetben kivett 3*9 diót,
összesen 108 + 3*9 = 135 = 15*9
diót vettek ki, ezzel kiürült a zsák.
Innen adódik, hogy a diók száma nem lehet kétjegyű.
Vagyis az első menet után az
N1 = 9(11a + b) = 135
egyenlet írja le az állapotot.
Egyszerűsítve
11a + b = 15
a = (15 - b)/11
A zárójeles mennyiség csak akkor osztható 11-el, ha
b = 4
ekkor viszont
a = 1
Tehát a diók száma
N = 140 + c
=========
ahol 0 ≤ c ≤ 9
Így ha
c = 0
S = 5
Peti kapja legkevesebbet
ha
c = 4
S = 9
mindenki ugyanannyit kap
ha
c > 4
S > 9
Peti kapja a legtöbbet.
DeeDee
***********
Itt a kód hozzá...lefuttatod és engem igazol :P
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
(new Program()).Entrance();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
protected int[] childs;
protected int childCount = 4;
public void Entrance()
{
int start = 0;
bool result;
do
{
childs = new int[childCount];
result = Test(start);
start++;
}
while (!result);
Console.WriteLine("Original: {0}", --start);
for (var c = 0; c < childCount; c++)
{
Console.WriteLine("Child: {0} with {1}", c, childs[c]);
}
}
public bool Test(int start)
{
int num = start;
for (int x = 0; x < 3; x++)
{
for (int y = 0; y < childCount; y++)
{
int sum = GetSum(num);
childs[y] += sum;
num -= sum;
if (num < 1 && (x < 2 || y < childCount -1) )
{
return false;
}
}
}
if (num != 0)
{
return false;
}
return true;
}
public int GetSum(int num)
{
string asString = num.ToString();
int sum = 0;
foreach (char i in asString)
{
int n;
Int32.TryParse(i.ToString(), out n);
sum += n;
}
return sum;
}
}
}
Jogos a két pont a hármas asztalnak!
A gondolatmenetem jó, csak én 4 fordulóval számoltam a 3 helyett, amivel a te eredményed jön ki.
Csak mellékesen, egy program nem bizonyít semmit, az algoritmus érdekes, ami alapján megírtad. :-)
DeeDee
*******
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!