#0 by Ninutss (Power User) (0 mesaje) at 2009-07-23 20:47:16 (839 săptămâni în urmă) - [Link]
Adunarea literelor simple
Iata o serie de probleme de logica din domeniul aritmesticii. Voi incepe cu probleme deosebit de simple. Ideea este de a inlokui intr-un anumit mod fiekare litera cu aceeas cifra si literele diferite cu cifre diferite, ajungindu-se la o adunare ``cifrika``, corekta din punkt de vedere aritmetik
ARAD+
SATU
MARE
ARGES
-----------
JUDETE
DOCHIA+
BALEIA
BÎLEA
BABELE
----------
CABANE
Sper ka ati intales in a doua koloana voi trebue sami dati raspunsul korekt....adika akolo undei ku ``x`` trebue sa fie cifrele korekte
#255 by Capilleary (Патлатый) (0 mesaje) at 2009-08-02 23:00:20 (837 săptămâni în urmă) - [Link]
#252 Scriam, scuze. Am încurcat . era un mic bug.
răspunsul e 50.
Cum am aflat
Am folosit C#.NET
Program.cs
using System;
using System.Windows.Forms;
namespace ProdusFactorial
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
this.toolStripProgressBar1.Value = 0;
this.toolStripProgressBar1.Maximum = 100;
this.toolStripStatusLabel1.Text = "Calculating exclusions...";
bool found = false;
for (int exclude = 1; exclude <= 100; exclude++)
{
this.toolStripProgressBar1.Value = exclude;
Application.DoEvents();
BigNumber testNumber=1;
for (int each = 1; each <= 100; each++)
if (each != exclude)
testNumber *= Factoriale[each];
if (testNumber.IsPatratPerfect)
{
this.toolStripStatusLabel1.Text = exclude.ToString();
found = true;
break;
}
}
this.toolStripProgressBar1.Visible = false;
if (!found)
this.toolStripStatusLabel1.Text = "Nothing found";
}
}
}
ÎnchideЗакрыть
Şi cel mai important:
BigNumbers.cs
using System;
namespace ProdusFactorial
{
class BigNumber
{
private int[] m_number;
private static BigNumber[] m_cache = new BigNumber[101];
private int[] FindDividers(uint Number)
{
int[] result = new int[101];
for (int i = 0; i < 101; i++)
result[i] = 0;
uint Num = Number;
for (uint i = 2; i <= Num; i++)
if ((Num % i) == 0)
{
Num /= i;
result[i]++;
i--;
}
return result;
}
public int this[int Index]
{
get
{
return this.m_number[Index];
}
set
{
this.m_number[Index] = value;
}
}
public static implicit operator BigNumber(uint number)
{
return new BigNumber(number);
}
public static BigNumber operator*(BigNumber number1, BigNumber number2)
{
BigNumber result = new BigNumber(number1.m_number);
for (int i = 2; i < 101; i++)
result[i] += number2[i];
return result;
}
public bool IsPatratPerfect
{
get
{
for (int i = 2; i < 101; i++)
if ((this[i] % 2) == 1)
return false;
return true;
}
}
public BigNumber Clone()
{
return new BigNumber(this.m_number);
}
}
}
ÎnchideЗакрыть
ÎnchideЗакрыть
Şi voila! rezultatul - 50.
Mesaj util ?
Da0 puncte
#256 by Slavuttici (Свiтлe) (0 mesaje) at 2009-08-02 23:03:23 (837 săptămâni în urmă) - [Link]
JJesti.... di ci se mai numesc teste de logică, dacă calculatorul rezolvă?
Mesaj util ?
Da0 puncte
#257 by Capilleary (Патлатый) (0 mesaje) at 2009-08-02 23:04:15 (837 săptămâni în urmă) - [Link]
#256 Slavuttici, trebu logică ca să-l faci să rezolve
Mesaj util ?
Da0 puncte
#258 by asoper (suslik turbat) (0 mesaje) at 2009-08-02 23:05:14 (837 săptămâni în urmă) - [Link]
#257 Capilleary, "... trebu logică ca să-l faci să rezolve ..." - nare el de unde sa aiba asa ceva
Mesaj util ?
Da0 puncte
#259 by Capilleary (Патлатый) (0 mesaje) at 2009-08-02 23:05:23 (837 săptămâni în urmă) - [Link]
P.S.
nuş pentru ce eu am pus progress bar. Timpul de execuţie<<<<<<<<1secundă.
Mesaj util ?
Da0 puncte
#260 by Slavuttici (Свiтлe) (0 mesaje) at 2009-08-02 23:08:19 (837 săptămâni în urmă) - [Link]
#259 Capilleary, dacă aşa merge vorba, atunci nu-i nici un greu ca să rogi calculatorul să înlocuiască literele cu cifre şi să verifice dacă satusface condiţia. Şi toate exemplele din #0 se rezolvă în mai puţin de 10 sec (timp luat arbitrar)
Mesaj util ?
Da0 puncte
#261 by Capilleary (Патлатый) (0 mesaje) at 2009-08-02 23:17:37 (837 săptămâni în urmă) - [Link]
#260 Slavuttici, go ahead
eu în #0 n-am înţeles chiar despre ce e vorba. Sunt exemple aparte sau unul singur, mare?
Mesaj util ?
Da0 puncte
#262 by sashok (Power User) (0 mesaje) at 2009-08-03 13:43:53 (837 săptămâni în urmă) - [Link]
#260 Slavuttici, +1
sau se putea de facut un program care sa verifice pentru fiecare numar aparte (mai mult timp de executie dar mai putin de scris)
Mesaj util ?
Da0 puncte
#263 by Scriam (User) (0 mesaje) at 2009-08-03 15:16:59 (837 săptămâni în urmă) - [Link]
#255 Capilleary, )),merge si asa rezolvare,dar iata alta:
Desigur ca daca eliminam din produs 50! produsul va deveni patrat perfect.
Propun alta problema:
Gasiti 5 numere naturale care au urmatoarea proprietate:
Modulul diferentei dintre oricare 2 numere este cel mai mare divizor comun al lor.
Cine o rezolva primul este bravo!
(Capilleary incearca fara programare...).
#264 by Ninutss (Power User) (0 mesaje) at 2009-08-03 20:35:05 (837 săptămâni în urmă) - [Link]
#261 Capilleary, exemple parte
Mesaj util ?
Da0 puncte
#265 by Capilleary (Патлатый) (0 mesaje) at 2009-08-03 21:57:16 (837 săptămâni în urmă) - [Link]
#263 Scriam, şi cum s-a ajuns de la 1!*2!*3!*...*99!*100! la 2^50*(1!*2!*3!*...*99!*100!)*50! ?
asta ca şi cum A=2^50*A*50!, ce-ar fi corect doar pentru A=0. Dar A=1!*2!*...*100!....
Rezolvarea nu e conexă.
Apropo, algoritmul meu se poate de mai optimizat de vreo 50 ori.
#263 Scriam, "... (Capilleary incearca fara programare...). ..." - nu-i optimal. Pentru ce fără dacă se poate CU?
Mesaj util ?
Da0 puncte
#266 by Scriam (User) (0 mesaje) at 2009-08-07 15:13:17 (837 săptămâni în urmă) - [Link]
#265 Capilleary, - daca ai fi analizat mai atent ti-ai fi dat seama ca este corect,fiecare factorial par n! il scriem ca (n-1)!*n,de aici se ia (1!*2!*3!*...*99!*100!)^2 ,mai ramin celelate numere naturale n care le scriem ca 2*k,2 se va repeta de 50 ori,iar cu ceilalti facotri se formeaza 50!.
#265 Capilleary, "... Pentru ce fără dacă se poate CU? ..." - Incearca sa o rezolvi CU.
P.S Scuze ca am scris asa tirziu,nu am intrat pe tmd de 3 zile.
Mesaj util ?
Da0 puncte
#267 by Capilleary (Патлатый) (0 mesaje) at 2009-08-07 15:30:14 (837 săptămâni în urmă) - [Link]
#266 Scriam, "... ,fiecare factorial par n! il scriem ca (n-1)!*n,de aici se ia (1!*2!*3!*...*99!*100!)^2 ..." - greşit! nu are cum!
tu susţii că <da figa1>*<da figa2>*<da_figa3> = <da figa2>, ceea ce este incorect.
#266 Scriam, "... Incearca sa o rezolvi CU. ..." - ok, când voi găsi o fereastră în timpul meu, cu dispoziţie de probleme academice.
Mesaj util ?
Da0 puncte
#268 by cipolino (steppenwolf) (0 mesaje) at 2009-08-07 15:46:44 (837 săptămâni în urmă) - [Link]
#267 Capilleary, el gresit oleak in explicatzie: 1!*(1!*2)*3!*(3!*4)*5!*(5!*6)*7!*(7!*8)*...*97!*(97!*98)*99!*(99!*100) echivalent cu (1!*3!*5!*7!*...*97!*99!)^2*[50^2*(1*2*3*4*5*6*7*...*50)]. Paranteza patrata este 2^50*50!, q.e.d. Doi se repeta de 50 de ori deoarece noi injumatazim numerele naturale pare (scriindu-le sub forma 2*k) de la 1 la 100 (iar ele sunt 50 la numar)