Skip to content

Commit 35584fc

Browse files
committed
afegit problema A
1 parent b7197ac commit 35584fc

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
2+
3+
import java.util.Map;
4+
import java.util.Scanner;
5+
import java.util.HashMap;
6+
7+
/* @author santi @fecha 26 ene. 2024*/
8+
public class ProblemaA {
9+
public static void main(String[] args) {
10+
Scanner sc = new Scanner(System.in);
11+
12+
//llegeixo cada cas de prova mentre n'hi hagi (condició finalitzacio nVots == 0, dins bucle amb break
13+
while (true) {
14+
Map<String, Integer> paisVots = new HashMap<>(); //declaro un nou hashMap (mapa)
15+
int nVots = sc.nextInt(); //llegeixo nombre de vots esperats (nre strings)
16+
sc.nextLine(); //netejo bufer
17+
18+
//CAS EN QUE S'ACABA LA SEQUÈNCIA
19+
if (nVots == 0)
20+
break;
21+
22+
//LLEGEIXO ELS STRINGS (PAISOS) I ELS CONTO DINS
23+
//CADA VALOR DE LA CLAU CORRESPONENT (PER A UN CAS DE PROVA DONAT)
24+
String pais = "";
25+
for (int i = 0; i < nVots; ++i) {
26+
pais = sc.next(); //llegeixo paraula a paraula
27+
if (paisVots.containsKey(pais)) //el pais ja ha sigut afegit a dins el map (sumem +1 als vots existents)
28+
paisVots.put(pais, paisVots.get(pais) + 1);
29+
else //el pais no existeix dins el map (posem un vot)
30+
paisVots.put(pais, 1);
31+
}
32+
33+
34+
//MIRO EL PAIS GUANYADOR O SI HI HA EMPATS (EL HASMAP ESTÀ ORDENAT)
35+
//I SI HI HA UN SOL PAIS NO CAL MIRAR EL HASH
36+
if (paisVots.size() == 1)
37+
System.out.println(pais);
38+
else {
39+
40+
//primera posicio es el pais amb mes vots. Segona posicio es el
41+
//segon pais amb mes vots. Si coincideixen hi ha empat
42+
43+
int maxVots = 0; //sempre hi haurà com a minim un vot aixi que 0 es un enter que podem escollir.
44+
String paisMaxVots = "";
45+
46+
//RECORREM EL MAP PER TROBAR ELS PAISOS MES VOTATS
47+
//BOOLEA empat clau per resoldre els empats (ha COSTAT!)
48+
boolean empat = false;
49+
for (Map.Entry<String, Integer> parell_paisVot : paisVots.entrySet()) {
50+
51+
String paiset = parell_paisVot.getKey();
52+
int votetsPaiset = parell_paisVot.getValue();
53+
54+
//System.out.printf("pais: %s", paiset);
55+
//System.out.printf("| vots: %d\n", votetsPaiset);
56+
57+
if (votetsPaiset > maxVots) {
58+
maxVots = votetsPaiset;
59+
paisMaxVots = paiset;
60+
empat = false;
61+
} else if (votetsPaiset == maxVots)
62+
empat = true;
63+
}
64+
65+
//IMPRIMIM EL RESULTAT PER PANTALLA
66+
if (empat)
67+
System.out.println("EMPATE");
68+
else
69+
System.out.println(paisMaxVots);
70+
}
71+
}
72+
}
73+
}

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ Els problemes d'aquesta secció es poden trobar a la [pàgina de la programaMe](
88

99
## Problema A
1010

11+
Penso que la millor forma de resoldre aquest problema, penso, és amb una estructura de dades que permeti emmagatzemar parelles de clau : valor i accedir al valor mitjançant la clau de forma eficient. En python tenim els diccionaris, i en C++ i Java tenim els map.
12+
13+
Per al problema que ens ocupa podem implementar el map en java d'aquesta forma:
14+
15+
`Map<String, int> map_paisVots = new HashMap<String, int>();`
16+
17+
18+
1119
## Problema B (Places disponibles per al mundial)
1220

1321
El problema B implica primer absorbir el primer enter de la seqüència d'entrada (que indica el nombre de casos de prova del mundial que inclou el test). Un cop fet això ja es pot anar a processar cada cas de prova (cada línia). En cada cas de prova es demana senzillament fer una diferència entre la suma dels equips assignats a les sis confederacions del mundial i el nombre d'equips E que participen en el mundial i imprimir-la per pantalla. La meva solució en java (no mostro l'import de l'Scanner, veure arxiu sencer):

0 commit comments

Comments
 (0)