Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


ivank
приношу извинения за недогляд при портировании...

предлагаю перейти в тестах на рандомные наборы чисел...

PHP код: Выделить весь код

using System;


namespace summ
{
    class 
Class1
    
{
        static 
int su(int[] mint[] sint iint pint lint sizeint corsize)
        {
            for(
int r 0;li++, r++)
            {
                if(
corsize m[i] == size)
                {
                    for(
int j 0<= p++)
                    {
                        
Console.Write("{0} + "m[s[j]]);
                    }

                    
Console.WriteLine("{0} = {1};"m[i], size);

                    return 
0;
                }
                else if(
corsize m[i] < size)
                {
                    if(
== l)
                    {
                        return 
== ? -1;
                    }

                    
s[1] = i;

                    switch(
su(ms11lsizecorsize m[i]))
                    {
                        case 
0:
                            return 
0;

                        case -
1:
                            if(
== 0)
                            {
                                return -
1;
                            }
                            break;

                        case 
1:
                            
1;
                            break;
                    }
                }
                else if(
== l)
                {
                    return 
1;
                }                
            }

            return 
1;
        }

        static 
void QSort(int[] arint size)
        {
            
int leftrightixLeftixRight;
            
int[] borderLeft = new int[100];
            
int[] borderRight = new int[100];
            
int stach 0;
            
int copy;
            
int x;
            
Random r = new Random();
            
borderLeft[0] = 0;
            
borderRight[0] = size 1;
            while(
stach >= 0)
            {
                
ixLeft left borderLeft[stach];
                
ixRight right borderRight[stach];
                
stach--;
                
                while(
left right)
                {
                    
ar[r.Next(leftright)];
                    
ixLeft left;
                    
ixRight right;

                    while(
ixLeft <= ixRight)
                    {
 
                        while(
ar[ixLeft] > x)
                        {
                            
ixLeft++;
                        }
                        while(
ar[ixRight] < x)
                        {
                            
ixRight--;
                        }
                    
                        if(
ixLeft <= ixRight)
                        {
                            
copy ar[ixLeft];
                            
ar[ixLeft] = ar[ixRight];
                            
ar[ixRight] = copy;
                            
ixLeft++;
                            
ixRight--;
                        }
                    }

                    if(
ixRight left right ixLeft)
                    {
                        
stach++;
                        
borderLeft[stach] = ixLeft;
                        
borderRight[stach] = right;
                        
right ixRight;
                    }
                    else
                    {
                        
stach++;
                        
borderLeft[stach] = left;
                        
borderRight[stach] = ixRight;
                        
left ixLeft;
                    }
                }                
            }
        }

        static 
bool summ(int[] mint lint size)
        {
            
QSort(ml);
            
int[] = new int[l];
            return 
su(ms0, -1lsize0) == true false;        
        }

        static 
bool summ2(int[] numint nint size)
        {
            
int m size;

            
int[] way = new int[m+1];
            for (
int i 0<= m; ++i)
                
way[i] = 0;

            
way[0] = 1;

            for (
int i 0n; ++i)
                for (
int j m0; --j)
                    if (
way[j] == && >= num[i] && way[j-num[i]] != 0)
                        
way[j] = num[i];

            if (
way[m] == 0)
            {
                
Console.WriteLine("Всё плохо");
                return 
false;
            }
            
Console.Write("Всё хорошо, путь: ");
            for (
int i m!= 0-= way[i])
            {
                
Console.Write("{0} "way[i]);
            }
            
Console.WriteLine(" = {0}"size);
            
            return 
true;
        }

        static 
void Main(string[] args)
        {
            
DateTime d1d2;
            
int l 2000;
            
int[] = new int[l];

            
Random r = new Random();
            for (
int j 0l; ++j)
            {
                
m[j] = r.Next(101000);
            }
            
int needed r.Next(10 31000 3);
    
            
d1 DateTime.Now;                
            
summ2(m,lneeded);
            
d2 DateTime.Now;
            
Console.WriteLine("ivank's time: {0}"d2 d1);

            
d1 DateTime.Now;                
            
summ(m,lneeded);
            
d2 DateTime.Now;
            
Console.WriteLine("vlad's time: {0}"d2 d1);
        }
    }


ivank's time: 00:00:11.3763584
vlad's time: 00:00:00.0200288

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 00:38, 25-09-2006 | #23