人気ブログランキング | 話題のタグを見る

ブログトップ

電子工作やってみたよ

プログラムコンテストの例題をHP電卓でやって見た No2

kusakaさんから同じ問題をC言語で解いたもの送っていただいたので載せてみます。

********************************************************************
私はRasberry Pi+Cで解いてみました。(Raspberry Piとは6千円程度のワンボードコンピューターで64ビット1.2Gで動作します。)
完成までは、なんだかんだで3時間以上かかったと思います。
大した計算量ではないようですが、電卓だと5分もかかるんですか。 Raspberry Piだと一瞬でした。
プログラムコンテストの例題をHP電卓でやって見た No2_c0335218_09510123.png

全プログラムリスト

#include <stdio.h>

long money = 200000;
long menu_a = 650;
long menu_b = 780;
long menu_c = 980;
long ans_a, ans_b, ans_c;
long max_count(long, long);
long max_combination(long, long, long);
void print_results(void);

main()
{
int i;
long a = max_count(money, menu_a);
//printf("hello %ld\r\n",a);
for(i = 0; i < a; i++){
ans_a = a - i;
//printf("b\r\n");
if(max_combination(money - (ans_a * menu_a), menu_b,menu_c) != 0){
print_results();
return 1;
}
}
printf("No ansuer!\r\n");
}
long max_count (long l, long price){
return l/price;
}
long max_combination(long m, long lo_price, long hi_price) {
long c;
int d;
long lest;
c = max_count(m, hi_price);
lest = m;

for(d = 0; d < c; d++){
lest = m - (hi_price * d);
//printf("m = %d ", m);
//printf("d = %d ", d);
//printf("lest of money = %d\r\n", lest);
if(lest % lo_price == 0){
ans_c = d;
ans_b = lest / lo_price;
return 1;
}
}
return 0;
}
void print_results(void)
{
printf("Max combination is\r\n");
printf("650_menu x %d\r\n", ans_a);
printf("780_menu x %d\r\n", ans_b);
printf("980_menu x %d\r\n", ans_c);
printf("Total = %d\r\n", ans_a * menu_a + ans_b * menu_b + ans_c * menu_c); }


Max combination is
650_menu x 286
780_menu x 3
980_menu x 12
Total = 200000




以前 教えていただいた アルストロメリアの花です。
今日 2017年10月11日 まだ咲いています。寿命がながいですね。

プログラムコンテストの例題をHP電卓でやって見た No2_c0335218_10262574.jpg


おくらの花です。
シンプルで綺麗、好きですね。  これもまた 長生き。

プログラムコンテストの例題をHP電卓でやって見た No2_c0335218_10265969.jpg


by telmic-gunma | 2017-10-11 10:33 | HP電卓