Kezdőoldal » Közoktatás, tanfolyamok » Házifeladat kérdések » Programozás C-ben házi, nem...

Programozás C-ben házi, nem tudom, hogy egyáltalán jól indultam-e el a feladata megoldásában, ebben segítség?

Figyelt kérdés

Feladat: A program a bemenetére először kap egy darabszámot, ami megmondja hogy mennyi számmal kell dolgoznia (tudjuk hogy legfeljebb 50). Ezután a bemenetre kap ennyi darab egész számot. (A darabszám és a többi szám között a láthatóság kedvéért van egy üres sor, de ez a bekérést nem zavarja). A program kimenete egy darab szám legyen: ha az összes lehetséges módon kiválasztunk 4 különböző számot a beolvasottak közül, hány olyan számnégyes lesz, ahol a legnagyobb és a legkisebb szám összege megegyezik a másik kettő szám összegével. Fontos: csak különböző számokból álló számnégyeseket vizsgálunk. A bemeneten szerepelhet egy érték többször is. Figyelj arra, hogy ha a beolvasott érték szerepelt már korábban, akkor ne mentsd el a tömbbe, hanem ugord át. A bemenet elején lévő darabszám a kapott számok mennyiségét mondja meg, de az egyezések miatt lehet hogy végül a tömbben kevesebb elem lesz.


Példa:


A 34, 56, 23, és 45 számok megfelelő számnégyes alkotnak, hiszen a legkisebb és legnagyobb (23 és 56) összege ugyanannyi, mint a másik kettő (34 és 45) összege (mindkettő 79).


Én eddig jutottam:

#include <stdio.h>

#include <stdlib.h>

int main(){

unsigned int darabszam;

scanf("%u",&darabszam); //the length of the array

unsigned int i,j,l,k,t,d;

int e=0;

unsigned int *arr=malloc(sizeof(unsigned int)*darabszam); //size of the array

unsigned int len=sizeof(*arr)/sizeof(arr[0]);

for (i=0;i<darabszam;i++)

scanf("%u",&arr[i]); //elements of the array

for(unsigned int i=0;i<len;i++)

for(j=0;j<len;j++)

for(k=0;k<len;k++)

for(l=0;l<len;l++)

if (arr[i]>arr[l] && arr[i]>arr[k] && arr[i]>arr[j])

if (arr[j]<arr[l] && arr[j]<arr[k] && arr[j]<arr[i])

{t=arr[j]+arr[i];

d=arr[l]+arr[k];

if(t==d)

e++;}

printf("%d\n",e);

return 0;

}


2019. nov. 29. 10:08
1 2
 11/13 A kérdező kommentje:
Ha kétszer van benne egy szám, akkor azt kettőnek veszi de csak egynek kéne, 34 kétszer van benne és úgy 12+34et kétszer veszi
2019. dec. 2. 14:41
 12/13 anonymousreview60 ***** válasza:

#include <stdio.h>

#include <stdlib.h>


int main()


{

unsigned int szam,szam2;

unsigned int i,j,k,l;

unsigned int darab=0;

unsigned int *b,*tiszta;

unsigned int csere;

int cserelni;

unsigned int tomb[4];


/*A beolvasando szamok darabszamanak beolvasasa.*/

printf("A beolvasando szamok darabszama: ");

scanf("%d",&szam);


/*Memoriafoglalas a szamoknak.*/

b = calloc(szam,sizeof(unsigned int));


/*A szamok beolvasasa.*/

for (i=0; i<szam; i++)

{

scanf("%d",&b[i]);

}


/*A szamok novekvo sorba rendezese.*/

cserelni = 1;

while(cserelni)

{

for (i=0; i<szam-1; i++)

{

if (b[i]>b[i+1])

{

csere = b[i];

b[i] = b[i+1];

b[i+1] = csere;


}

}


/*A szamok nagysagrendisegenek vizsgalata*/

cserelni = 0; /*Nem kell ujravizsgalni a szamsort, ...*/

for (i=0; i<szam-1; i++)

{

if (b[i]>b[i+1]) /*..., kiveve, ha legalabb 1 esetben 2 olyan egymast koveto szam van, ahol a kisebbik koveti a nagyobbat.*/

{

cserelni = 1;

break;

}

}

}


printf("Az eredeti szamsor: ");

for(i=0;i<szam;i++)

{

printf("%u ",b[i]);

}

printf("\n");



/*A tobbszoros peldanyok kiszurese*/

szam2 = 0;

for(i=0;i<szam-1;i++)

{

if(b[i+1] > b[i])

{

szam2++;

}

}

szam2++;

printf("Nem ismetlodo szam: %u\n",szam2);


tiszta = calloc(szam2,sizeof(unsigned int));


i=0;

csere = 0;

tiszta[csere] = b[i];

i++;

while(csere<szam2)

{

if(b[i]>tiszta[csere])

{

tiszta[++csere] = b[i];

i++;

}

else

{

i++;

}

}

printf("A tisztitott szamsor:");

i = 0;

for(i=0;i<szam2;i++)

{

printf("%u ",tiszta[i]);

}

printf("\n");


/*A szamnegyesek vizsgalata.*/

for (i=0; i<szam-3; i++)/*1. elem kivalasztasa.*/

{

tomb[0]=tiszta[i];

for (j=i+1; j<szam-2; j++)/*2. elem kivalasztasa.*/

{

tomb[1]=tiszta[j];

for (k=j+1; k<szam-1; k++)/*3. elem kivalasztasa.*/

{

tomb[2]=tiszta[k];

for (l = k+1; l<szam; l++)/*4. elem kivalasztasa.*/

{

tomb[3]=tiszta[l];


if (tomb[0]+tomb[3]==tomb[1]+tomb[2])/*A feladatbeli osszegzeses ellenorzes*/

{

darab++;/*Ha megfelel, akkor egyel noveljuk a megfelelo szamnegyesek darabszamat.*/

printf("Szamnegyes: %d %d %d %d\n",tomb[0],tomb[1],tomb[2],tomb[3]);/*A megfelelo szamnegyes kiiratasa.*/

}

}

}

}

}


printf("Megfelelo szamnegyesek darabszama: %d\n",darab);

return 0;

}

2019. dec. 2. 16:16
Hasznos számodra ez a válasz?
 13/13 A kérdező kommentje:
Sikerült, ezer hála a segítségért :)
2019. dec. 2. 21:30
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!