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?
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;
}
#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;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!