A feladat leírását, melynek a megoldását közzéteszem, innen töltheted le. Az innen letölthető tömörített állományokban megtalálod a Code::Blocks-ban megnyitható projectet, és a feladat a forrásait. A kicsomagoláshoz a 7zip nevű ingyenes programot javaslom.
A feladat megoldása az esetleges központi megoldások logikájától eltérhet. Véleményem szerint nem a trükkös megoldások azok, amelyeket hamarabb kitalál az ember, hanem a több lépésben, de elemi algoritmusok használatával készített megoldás az, amely sok esetben sokkal hamarabb elkészül.
Jöjjön akkor a forráskód:
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
struct feherje
{
string rovid;
string betu;
int c;
int h;
int o;
int n;
int s;
int mtomeg;
string toString()
{
stringstream ss;
ss << rovid << " " << betu << " " << c << " " << h <<
" " << o << " " << n << " " << s << " " << mtomeg << endl;
return ss.str();
}
};
feherje keres( string betu, feherje feherjek[], int meret )
{
for( int i = 0; i < meret; i++ )
{
if( feherjek[i].betu == betu )
{
return feherjek[i];
}
}
return feherjek[0];
}
int main()
{
// 1. feladat
int meret = 0;
ifstream input("aminosav.txt");
string sor;
while( getline(input,sor) )
{
meret++;
}
meret /= 7;
feherje feherjek[meret];
input.clear();
input.seekg(0);
for( int i = 0; i < meret; i++ )
{
input >> feherjek[i].rovid;
input >> feherjek[i].betu;
input >> feherjek[i].c;
input >> feherjek[i].h;
input >> feherjek[i].o;
input >> feherjek[i].n;
input >> feherjek[i].s;
// 2. feladat
feherjek[i].mtomeg = feherjek[i].c * 12
+ feherjek[i].h
+ feherjek[i].o * 16
+ feherjek[i].n * 14
+ feherjek[i].s * 32;
}
input.close();
/*
for( int i = 0; i < meret; i++ )
{
cout << feherjek[i].toString();
}
*/
// 3. feladat
for( int i = 0; i < meret-1; i++ )
{
for( int j = i+1; j < meret; j++ )
{
if( feherjek[i].mtomeg > feherjek[j].mtomeg )
{
feherje csere = feherjek[i];
feherjek[i] = feherjek[j];
feherjek[j] = csere;
}
}
}
ofstream output("eredmeny.txt");
output << "3. feladat" << endl;
for( int i = 0; i < meret; i++ )
{
output << feherjek[i].rovid << " " << feherjek[i].mtomeg << endl;
}
// 4. feladat
int mdarab[5] = {0};
ifstream input2("bsa.txt");
string s;
int kapcs = -1;
stringstream bsalanc;
while( getline(input2, s) )
{
bsalanc << s;
feherje f = keres(s,feherjek, meret);
mdarab[0] += f.c;
mdarab[1] += f.h;
mdarab[2] += f.o;
mdarab[3] += f.n;
mdarab[4] += f.s;
kapcs++;
}
mdarab[1] -= kapcs*2;
mdarab[2] -= kapcs;
output << endl << "4. feladat" << endl;
output << "C " << mdarab[0] << " H " << mdarab[1] << " O " << mdarab[2] <<
" N " << mdarab[3] << " S " << mdarab[4];
cout << endl << "4. feladat" << endl;
cout << "C " << mdarab[0] << " H " << mdarab[1] << " O " << mdarab[2] <<
" N " << mdarab[3] << " S " << mdarab[4] << endl;
// 5. feladat
cout << endl << "5. feladat" << endl;
int toresdb = 0;
string bsa = bsalanc.str();
int hossz = bsa.length();
for( int i = 0; i < hossz; i++ )
{
if( bsa[i] == 'Y' || bsa[i] == 'W' || bsa[i] == 'F' )
{
toresdb++;
}
}
toresdb++;
string lancok[toresdb];
int hely = 0;
int elozo = 0;
for( int i = 0; i < hossz; i++ )
{
if( bsa[i] == 'Y' || bsa[i] == 'W' || bsa[i] == 'F' )
{
lancok[hely] = bsa.substr(elozo,i-elozo+1);
elozo = i+1;
hely++;
}
}
int max = 0;
for( int i = 1; i < toresdb; i++ )
{
if( lancok[i].length() > lancok[max].length() )
{
max = i;
}
}
int kezdet = 0;
for( int i = 0; i < max; i++ )
{
kezdet += lancok[i].length();
}
cout << "hossza: " << lancok[max].length() << " kezdet helye: " <<
kezdet << " lanc vege: " << kezdet+lancok[max].length() << endl;
// 6. feladat
cout << endl << "6. feladat" << endl;
string elso;
int elsohossz;
for( int i = 0; i < hossz-1; i++ )
{
if( bsa[i] == 'R' && ( bsa[i+1] == 'A' || bsa[i+1] == 'V' ) )
{
elso = bsa.substr(0,i+1);
elsohossz = i+1;
break;
}
}
int dbc = 0;
for( int i = 0; i < elsohossz; i++ )
{
if( elso[i] == 'C' )
{
dbc++;
}
}
cout << "A Factor XI enzim altal hasitott elso darabban " << dbc <<
" darab Cisztein talalhato." << endl;
return 0;
}
