Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

 Пак задача за републиканска олимпиада
Автор  Black`n`White (28.07.2006 23:39) съобщение до автора
Погледнат  2112 пъти добави към любими
Оценка добави коментар
Гласове  5 изпрати на приятел
Коментари  (0) абонирай се за C-Cplusplus
     
Black`n`White
     
 

Условие

Дадена е редица X от N цели числа. Да се намери най-дългата подредица, сумата от елементите на която се дели (без остатък) на зададено число K. Казваме, че Z е подредица на  X, ако Z може да бъде получена чрез премахване на някои членове на X. Празното множество е подредица (с дължина 0) и цялата редица също е подредица (с дължина N).

Вход

Първият ред на входа съдържа две числа N и K. Следващите редове съдържат точно N цели числа - елементите на редицата. Входът съдържа повече от един пример и завършва с N = 0. Всички числа на входа са цели положителни числа, по-малки от 1000, с изключение на последното число, което е 0.

Изход

Всеки ред на изхода съдържа дължината на най-дългата намерена подредица за поредния пример от входа.

Solution by Chris Popoff (also known as Black & White)

Note: I have changed the input and the output format to show details on each operation.
The important thing is the algorithm, so I’ve skipped some nasty parts from the code, which verifies whether entered data refers to a possible situation.

Compile with MS Visual C++, Borland C++, Dev-C++ 4.9.9.2, or other compiler that supports the ISO Standard C++ with STL.

So... That’s all folks: */

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <cstdlib>
#include
<iostream>
#include
<vector>
#include
<algorithm>

using namespace std;

int main()
{
   
int n,k,cd=-1,d;
   
cout << "Enter the number of the digits:";
   
cin >> n;
   
cout << "Enter the divisor:";
   
cin >> k;
   
   
vector<int> c(n);
   
for(int i = 0; i < n; i++) {
           
cout << "Enter N" << i+1 << " :";
           
cin >> c[i]; }
   
   
int excl = 1;
   
for(int i = 1; i < n; excl*=++i);
   
for(int i = 1; i < excl; i++)
    {
           
next_permutation(c.begin(),c.end());
           
int sum = 0;       
           
for(int b = 0; b < n; b++);
           
// permutation created
           
for(d = 0; d < n; d++)
            {
                   
sum += c[d];
                   
if(!(sum % k))
                            
if((cd < d) && (cd = d));          
           
}
    }
   
   
cout << cd+1 << endl;
   
   
system("PAUSE");
   
return EXIT_SUCCESS;
}



Ключови думи: C++ задача олимпиада




 За автора: Black`n`White  
I am experienced .NET Application Developer, and also I have worked a lot of time with Borland VCL. Right now I am working on several projects, based on the .NET Platform. Also I am student at the Technical University of Varna
   
 1 посетител чете този скрипт (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 
  • Интересно от myLINKS
 
 
 
 



IT-PLACE.NET © 2004 - 2008