J'ai trouvé un site de soumission de problèmes de programmation et de notation fourni par l'Université Aizu appelé AIZU ONLINE JUDGE et c'était amusant, donc j'ai des problèmes dans plusieurs langues. J'ai décidé de le résoudre.
Sélectionnez 5 langages: C ++, python, php, sqlite3, common lisp. Le langage que j'utilise habituellement est le C ++, et j'ai écrit d'autres langages lors de recherches en ligne.
Cette fois, le problème est 0001 Liste des 3 meilleures collines.
List of Top 3 Hills
Il existe 10 données qui représentent la hauteur de la montagne sous forme de nombre entier en mètres. Créez un programme qui lit les 10 données, en sort 3 des plus élevées et termine.
Input
Hauteur de la montagne 1 (entier) Hauteur de la montagne 2 (entier) . . Hauteur de la montagne 10 (entier)
Constraints
0 ≤ hauteur de la montagne ≤ 10000
Output
Hauteur de montagne la plus élevée La hauteur de la deuxième plus haute montagne La troisième plus haute montagne
Sample Input
1819 2003 876 2840 1723 1673 3776 2848 1592 922
Output for the Sample Input
3776 2848 2840
Pour le moment, écrivez quelque chose qui renvoie la réponse correcte à l'entrée d'échantillon. Le tri est inclus en standard dans toutes les langues, je n'ai donc pas eu à écrire l'algorithme moi-même.
C++
#include <iostream>
#include <set>
using namespace std;
int main() {
typedef std::multiset<int> MySet;
MySet heightSet;
for(int i = 0; i < 10; ++i)
{
int val;
cin >> val;
//Trié automatiquement lorsque vous insérez un élément dans l'ensemble
heightSet.insert(val);
}
//Inverser pour accéder par ordre décroissant_Utiliser l'itérateur
MySet::reverse_iterator rit = heightSet.rbegin();
for(int i = 0; i < 3; ++i)
{
cout << *rit << endl;
++rit;
}
return 0;
}
Si vous utilisez le conteneur multiset de STL, il sera automatiquement trié lorsque vous insérez un élément, vous pouvez donc l'ignorer un peu.
python
#Créer un tableau
n = list()
for var in range(0, 10):
#Lire une ligne à partir de l'entrée standard
#Diffuser en int
n.append( int(raw_input()) )
#Trier le tableau par ordre décroissant
n.sort(reverse = True)
for var in range(0, 3):
print n[var]
J'ai été impressionné de pouvoir l'écrire brièvement avec python.
PHP
<?php
$hi = fopen('php://stdin', "r");
$ho = fopen('php://stdout', "w");
#Créer un tableau vide
$arr = array();
#Définir les données à partir de l'entrée standard
for($i = 0; $i < 10; $i++)
{
fscanf($hi, "%d", $arr[]);
}
#Tri décroissant
rsort($arr);
#production
for($i = 0; $i < 3; $i++)
{
fwrite($ho, sprintf("%d\n", $arr[$i]));
}
fclose($ho);
fclose($hi);
Cela ressemble au langage c sauf pour ajouter $ à la variable.
sqlite3
--Créer une table
create table tbl(height integer);
--Lire les données d'un fichier texte
.import data.txt tbl
-- 'tbl'De'height'Trier par ordre décroissant par champ et lire 3 lignes
select * from tbl order by height desc limit 3;
Je ne savais pas comment mettre des informations dans un enregistrement à partir d'une entrée standard dans sqlite3, donc je lis à partir d'un fichier.
Common Lisp
;;Recevoir n fois l'entrée standard et ajouter à la liste
(defun input (lst n)
(cond
((eq (length lst) n)
lst
)
(t
(input (append lst (list (read)) ) n )
)
)
)
;;Créer un tableau partiel des n premiers éléments de la liste
(defun gettop (lst n)
(if (or (= n 0) (null lst))
nil
(cons (car lst)
(gettop (cdr lst) (- n 1))
)
)
)
(mapcar #'(lambda (x) (format t "~A~%" x)) ;Éléments de la liste de sortie séparés par des sauts de ligne
(gettop
(sort (input () 10) #'>) ;Créer une liste à partir de l'entrée standard et trier par ordre décroissant
3 ;Créez les trois premières listes
)
)
CommonLisp était trop étranger pour que je m'habitue au type procédural, et cela a pris beaucoup de temps.
Recommended Posts