最小行で逝ってみる。(C言語)
■ このスレッドは過去ログ倉庫に格納されています
0001稲垣事故"朗
NGNG1,2,3,4,5,6,7,8,9(数字の並びは固定)である。
これらの数の間に+、−、何も入れないという演算子をいれて、計算
する。そして、計算結果が100になる組み合わせを、すべて表示する
プログラムを作成せよ。100になるのは、12とうりのはず。
(夏休みの課題だ。今のところ27行。)
<注意>
1行に2文以上書かない。
ヘッダー、DLL,COM,など、ソースレベルおよびバイナリレベルの外部ルーチン
は禁止する。
ソースコードは、すべてカウントする。(コメント、ヘッダなど)
プログラムは、コンソールアプリケーションとする。
入出力は、ストリーム入出力を使用する。
誰かたすけて〜。小町算中毒に・・・
0002デフォルトの名無しさん
NGNG課題なんだし自分でやったのを胸を張って提出すれば?
0003デフォルトの名無しさん
NGNG>何も入れないという演算子
ごめん、それなに?
2 3 だったら二十三ということ?
0004デフォルトの名無しさん
NGNGこれだとタイトルの(C言語)というのはウソになるね・・・。
0005デフォルトの名無しさん
NGNG演算部はCで実装しろってことじゃない?
何の意味があるのかわからないが。
0006旧態依然
NGNG#include <stdlib.h>
int main()
{
int i, s, sign[10];
long n, x;
for (i = 1; i <= 9; i++) sign[i] = -1;
do {
x = n = 0; s = 1;
for (i = 1; i <= 9; i++)
if (sign[i] == 0) n = 10 * n + i;
else {
x += s * n; s = sign[i]; n = i;
}
x += s * n;
if (x == 100) {
for (i = 1; i <= 9; i++) {
if (sign[i] == 1) printf(" + ");
else if (sign[i] == -1) printf(" - ");
printf("%d", i);
}
printf(" = 100\n");
}
i = 9; s = sign[i] + 1;
while (s > 1) {
sign[i] = -1; i--; s = sign[i] + 1;
}
sign[i] = s;
} while (sign[1] < 1);
return EXIT_SUCCESS;
}
0007デフォルトの名無しさん
NGNG[2] 1+2+3-4+5+6+78+9 = 100
[3] 1+2+3-4*5+6*7+8*9 = 100
[99] 123-4-5-6-7+8-9 = 100
[100] 123+45-67+8-9 = 100
[101] 123-45-67+89 = 100
0008デフォルトの名無しさん
NGNGどうにでもなる話なんじゃないのか?
0009デフォルトの名無しさん
NGNG12通りじゃ幾らなんでも少なすぎでしょ。正解が出てこそナンボ、
不正解プログラムが短くても意味無いと思う。
>これらの数の間に+、−、何も入れないという演算子をいれて
と"数の間"いうことは、数式先頭のマイナス符号は無効なのかね?
その場合101通り。先頭のマイナスを認めれば162通りか。
0010デフォルトの名無しさん
NGNG符号は正負だけらしいよ・・・(笑
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG「数の間」が課題なら、答えは11通りだね。先頭の単項演算を考慮して12通り。
>>1の出題内容と自己の解はアンマッチ。
00131です。
NGNGあと、何も入れないとは78とか123とかです。
説明不足でもうしわけありません。
私は6さんの考え方に近いです。
「自分でやれ!」という意見もあるかと思いますが、ごもっともです。
考え込んで2週間がたちました。27行から減りません。
夏休みもあとわずかになりました。どうかお力を貸してください。
よろしくお願い致します。
0014デフォルトの名無しさん
01/08/26 22:43ID:.2cACfusなんか>>2と同じことを書くけど、何行だかしらんがとにかく
自分で書けたなら、それで十分じゃないかと思うのだが。
0015デフォルトの名無しさん
01/08/27 17:01ID:NEa0N4C6さらに精進に励むのだ。
0016デフォルトの名無しさん
01/08/27 17:54ID:cXXJEOdY0017デフォルトの名無しさん
01/08/27 18:09ID:q21zzpHo7行スレで聞いておいだされたんじゃなかったっけ?
0018デフォルトの名無しさん
01/08/27 18:23ID:cXXJEOdY0019デフォルトの名無しさん
01/08/28 01:14ID:WV78peY2#include<math.h>
#include<string.h>
int main(void){
long i,j,k,flag,sum,temp,n = 0;
char sz[128];
for(i=0;i<(long)pow((double)3,(double)9);i++){
flag = sum = temp = *sz = 0;
for(j=0;j<9;j++){
k = i / (long)pow((double)3,(double)j) % 3 - 2;
if(j==0 && k==0) break;
sum = (k==-1) ? sum : (sum + temp * (flag + 1));
flag = (k==-1) ? flag : k;
temp = (k==-1) ?(temp * 10 + (j + 1)) : (j + 1);
*(long *)(sz + strlen(sz)) = (k==-1) ? ('1' + j) : (0x2B - k) + ('1' + j) * 0x100;
}
if((sum + temp * (flag + 1))==100) printf("%04d %s = 100\n",++n,sz);
}
return 0;
}
0020芥
01/08/28 01:40ID:MUWorKrochar s[]=" 1 2 3 4 5 6 7 8 9 =100";
int p=0;
void S(int d, int e, int a, char x)
{
s[(d-1)*2]=x;
if(++d>9){
if(e+a==100)printf("[%2d]%s\n",++p,s);
return;
}
S(d, e+a, d, '+');
S(d, e+a, -d, '-');
S(d, e, 10*a+(a>0?d:-d), ' ');
}
int main()
{
S(1, 0, 1, ' ');
S(1, 0,-1, '-');
return 0;
}
00211です。
01/08/28 17:00ID:mSc.uT8s僕はこういうやり方はまったく思いつきませんでした。
なぜ、このようなやり方でできるのか、どうすれば問題が解決するのか
など大変勉強になります。自分もお二人のプログラムを参考にして、
自分のアルゴリズム能力を向上させていきたいです。
それにしてもすごいですね!!
0022デフォルトの名無しさん
01/08/28 18:51ID:QKtRe60g>>20
FreeBSDのgccではできない
% gcc 20.c
20.c: In function `S':
20.c:6: syntax error before character 0241
%
0023デフォルトの名無しさん
01/08/28 19:00ID:iPf.P.c2行を少なくするというのは
アルゴリズムの本質的な部分と関係ない所の話になってくるので
やっても(無駄とはいわないが)アルゴリズムの勉強にはならないと思う。
0024デフォルトの名無しさん
01/08/28 19:49ID:zBr23uZAお前はコンパイルエラー読めないのか?
0025デフォルトの名無しさん
01/08/29 17:12ID:7WZsAq3sおまえH○L性だろ。
教師にちくるぞ
0026デフォルトの名無しさん
01/08/29 17:30ID:jrovamwsH∀L生だな
0027デフォルトの名無しさん
01/08/29 18:12ID:7WZsAq3sそのまんま出すとバレるぞ。
0028デフォルトの名無しさん
01/08/30 23:07ID:RU9JH1Zg#include <stdio.h>
#include <string.h>
long s[3] = { 0, 1, -1 };
char sgn[3] = {0, '+', '-'};
int main()
{
long k, n=0;
for (k = 0; k < 3*3*3*3*3*3*3*3*3; k++) {
long i, l, c, x=0, d=0;
char buf[256], *p = buf;
for (i = l = 1; i <=9; i++, l *= 3) {
d = (c = (k/l)%3) ? (x += d, s[c] * i) : (d * 10 + (d < 0 ? -i : i));
(!c || ( *p++ = sgn[c] )) && (*p++ = ('0'+i)) && (*p=0);
}
if ((k%3) && x + d == 100) {
printf("[%d] %s=%d\n", ++n, buf, x+d);
}
}
}
0029デフォルトの名無しさん
01/08/31 23:14ID:VrhfaGckそのまんま出すわけね〜だろボヶ〜〜〜。
0030デフォルトの名無しさん
01/08/31 23:35ID:QT9TNDFg変数かえてもアルゴリズムが同じで結局バレ(藁
小町算もわからんようなアホゥには何言っても無駄。
0031パル生
01/09/01 00:54ID:oskLLM56あまり人にみられたくないのでsage進行でいこうぜ。
0032デフォルトの名無しさん
01/09/01 01:15ID:ezoDv4b.おいおいアルゴリズムなんざどれだけでもかえれるぜ。
発展させていけばいいんだよ。
変数しか変えれないおまえといっしょにするな。
× 変えれない
○ 変えられない
0034デフォルトの名無しさん
01/09/01 01:23ID:ezoDv4b.わりぃ。わりぃ。
0035デフォルトの名無しさん
01/09/02 16:59ID:udxJtb/cどうせ大半のやつらはネットに落ちているソースを改造するのだから。
0036デフォルトの名無しさん
01/09/02 22:26ID:4dvhJnlM先生が2ちゃんねらってこともバレますね。
0037デフォルトの名無しさん
01/09/02 23:10ID:8MD0AtR2もう先生はここ知ってるよ。
0038デフォルトの名無しさん
01/09/03 09:10ID:9o60VuWE0039○岡
01/09/04 16:42ID:PtDZjrVA0040教師
01/09/06 12:44ID:7NJjKkl.他人のソースプログラムを真似(類似)した生徒は減点対象にします。
もちろんココのソースプログラムも減点対象です。
0041教師
01/09/06 12:47ID:7NJjKkl.0042デフォルトの名無しさん
01/09/06 16:55ID:H3TaFPTk0043デフォルトの名無しさん
NGNG>1,2,3,4,5,6,7,8,9(数字の並びは固定)である。
>これらの数の間に+、−、何も入れないという演算子をいれて、計算
>する。
はい、机上で計算しましょう。
>そして、計算結果が100になる組み合わせを、すべて表示する
>プログラムを作成せよ。
はい、机上の計算結果を表示するルーチンのみをプログラムで作成
しましょう。
6行でできるぞ。
#include <stdio.h>
int main()
{
printf("答え(机上で計算した結果を書いてね)\n");
return 0;
}
あいまいな問題を出したほうが悪いので上記でも正解になるはず。
0044デフォルトの名無しさん
NGNG>>43
屁理屈言って楽しいか?
■ このスレッドは過去ログ倉庫に格納されています