Hirdetés
- Mobil flották
- Motorola Edge 50 Neo - az egyensúly gyengesége
- EarFun Air Pro 4+ – érdemi plusz
- Samsung Galaxy Watch8 - Classic - Ultra 2025
- Redmi Note 10S - egy a sok közül
- Örömhír: nem spórol Európán a OnePlus
- Milyen okostelefont vegyek?
- Samsung Galaxy Watch7 - kötelező kör
- Apple iPhone 17 - alap
- Betokozódik az iPhone fejlesztése
Új hozzászólás Aktív témák
-
jattila48
aktív tag
válasz
jattila48
#3116
üzenetére
Hát, ez az algoritmus nem valami jó. Ugye mindig olyan számot hagytam el a sorozatból (pontosabban az első ilyet), amivel a legtöbb még ép mintasorozatot rontom el. Most egy kicsit módosítottam az algoritmuson, és az első ép mintasorozatból hagyom el azt az elemet, ami a legtöbb mintasorozatot rontja el. Ennek megfelelően a módosított forráskód:
#include <Windows.h>
#include <stdio.h>
int main(int argc,char *argv[])
{
if(argc<3){
printf("Hasznalata: mintat_gyomlal <a gyomlalando sorozat hossza> <minta elemek 1... novekvoleg>");
exit(1);
}
int mintahossz=argc-2,sorozathossz=atoi(argv[1]);
auto minta=new int[mintahossz];
for(int i=0;i<mintahossz;++i){
minta[i]=atoi(argv[i+2]);
}
int minta_terjedelem=minta[mintahossz-1];
auto sorozat=new int[sorozathossz];
for(int i=0;i<sorozathossz;++i){
sorozat[i]=0;
}
for(int i=0;i<=sorozathossz-minta_terjedelem;++i){
for(int j=0;j<mintahossz;++j){
++sorozat[minta[j]+i-1]; //a tomb kezdeti feltotlese. az i.-edik elem azt jelzi, hogy az i+1 szam hany mintasorozatban szerepel
}
}
printf("A sorozatbol kihuzando szamok: ");
int nkihuzando=0;
while(1){
int kihuzando,max=0;
/*
//megkeressuk a legtobb mintasorozatban szereplo szamot, ez lesz a kihuzando+1 (a kihuzando indexu, mivel 0-val kezdodik az indexeles)
for(int i=0;i<sorozathossz;++i){
if(sorozat[i]>max){
kihuzando=i;
max=sorozat[i];
}
}
*/
//modositas: az elso ep mintasorozatbol keressuk ki a legtobb mintasorozatot elronto elemet
int i;
for(i=0;i<sorozathossz && sorozat[i]==0;++i);
if(i==sorozathossz)break;
for(int j=0;j<mintahossz;++j){
int n=i+minta[j]-1;
if(sorozat[n]>max){
kihuzando=n;
max=sorozat[n];
}
}
if(max==0)break;
printf("%d ",kihuzando+1);
++nkihuzando;
//A kihuzott szam utan a sorozat tomb elemeit csokkentjuk, hogy tovabbra is azt jelezze, a megmaradt ep mintasorozatok kozul hanyban szerepel az adott szam
for(int i=0;i<mintahossz;++i){
int n=kihuzando-minta[i];
for(int j=0;j<mintahossz;++j){
int k=minta[j]+n;
if(k>=0 && k<sorozathossz && sorozat[k]>0){
--sorozat[k];
}
}
}
}
printf("\r\nOsszesen %d db.",nkihuzando);
delete[] minta;
delete[] sorozat;
}A végén kiírom, hogy hány elemet hagytam el. Valamivel jobb eredményt ad mint az előző, de szerintem ez is távol áll az optimálistól.
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- petipetya: Nagy chili topic. :)
- A fociról könnyedén, egy baráti társaságban
- Eltűnt a fél internet!
- Pánikban a világ a Radeon RX 5000 és 6000 sorozat támogatása miatt
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- PH!otósok beszélgetős, offolós topikja
- Mobil flották
- Kamionok, fuvarozás, logisztika topik
- Delta Force (2024)
- Kuponkunyeráló
- További aktív témák...
- MacBook Air 13" - M4 - 16 GB - 256 GB - 3 ÉV GARANCIA
- Samsung Galaxy S10 128GB, Kártyafüggetlen, 1 Év Garanciával
- Samsung Galaxy S10 128GB, Kártyafüggetlen, 1 Év Garanciával
- Asus ROG Strix G G531GT - 15,6"FHD IPS 144Hz - i5 9300H - 16GB - Win11 - GTX 1650 - MAGYAR
- iPhone 13 PRO 128GB alpine green KÁRYTAFÜGGETLEN! ÚJ 100%-os akkumlátor! Gyönyörű!
- HIBÁTLAN iPhone 15 Pro Max 256GB Natural Titanium -1 ÉV GARANCIA -Kártyafüggetlen, 100% Akkumulátor
- GYÖNYÖRŰ iPhone 14 Pro 128GB Space Black-1 ÉV GARANCIA - Kártyafüggetlen, MS3781, 100% Akkumulátor
- Xiaomi Redmi Note 14 Pro+ 256GB,Újszerű,Dobozával,12 hónap garanciával
- Bomba ár! HP EliteBook 840 G2 - i5-5GEN I 8GB I 500GB I 14" HD+ I Cam I W10 I Garancia!
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max/
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest


