No.4ベストアンサー
- 回答日時:
No.3です。
No.2さんの方針でいかれるのであれば、重要なのは組み合わせを処理する部分ですよね。
例えば演算子の組み合わせは以下のように表現できますよね。
int main(void)
{
char *ops = "+-*/";
int i,j,k;
for(i=0; i<4; i++)
for(j=0; j<4; j++)
for(k=0; k<4; k++)
printf("%c %c %c\n", ops[i], ops[j], ops[k]);
}
4つの数値の配置パターンは以下のように書けます。
このロジックは正攻法じゃなくてダサいです。
ネットにはもっといいコードが転がってますんで、
そちらも参考にしてください。
int main(int argc, char *argv[])
{
char *nums = argv[1];
int i,j,k,l;
for(i=0; i<4; i++)
nums[i] -= '0';
for(i=0; i<4; i++){
for(j=0; j<4; j++){
if(i == j) continue;
for(k=0; k<4; k++){
if(i == k) continue;
if(j == k) continue;
for(l=0; l<4; l++){
if(i == l) continue;
if(j == l) continue;
if(k == l) continue;
printf("%d %d %d %d\n", nums[i], nums[j], nums[k], nums[l]);
}
}
}
}
}
C言語では数式を動的に作っても、直接解を得ることができません。
なので、前者のループは今回使わずに力技で処理するのがいいかと思いまして、
力技部分の処理を提示しました。
これで要素としては出揃ったと思います。
そういえば、除算をintでやっちゃってるんで、昨日のコードはちょっと
修正が必要ですね。
頑張ってください。
No.3
- 回答日時:
もし力技で解くなら、力技部分はこんなプログラムになるでしょうね。
(雰囲気を伝えるものであって、こうしろって意味じゃないです)
if(a+b+c+d == 10) printf("%d+%d+%d+%d\n", a, b, c, d);
else if(a+b+c-d == 10) printf("%d+%d+%d-%d\n", a, b, c, d);
else if(a+b+c*d == 10) printf("%d+%d+%d*%d\n", a, b, c, d);
else if(a+b+c/d == 10) printf("%d+%d+%d/%d\n", a, b, c, d);
else if(a+b-c+d == 10) printf("%d+%d-%d+%d\n", a, b, c, d);
else if(a+b-c-d == 10) printf("%d+%d-%d-%d\n", a, b, c, d);
else if(a+b-c*d == 10) printf("%d+%d-%d*%d\n", a, b, c, d);
else if(a+b-c/d == 10) printf("%d+%d-%d/%d\n", a, b, c, d);
else if(a+b*c+d == 10) printf("%d+%d*%d+%d\n", a, b, c, d);
else if(a+b*c-d == 10) printf("%d+%d*%d-%d\n", a, b, c, d);
else if(a+b*c*d == 10) printf("%d+%d*%d*%d\n", a, b, c, d);
else if(a+b*c/d == 10) printf("%d+%d*%d/%d\n", a, b, c, d);
else if(a+b/c+d == 10) printf("%d+%d/%d+%d\n", a, b, c, d);
else if(a+b/c-d == 10) printf("%d+%d/%d-%d\n", a, b, c, d);
else if(a+b/c*d == 10) printf("%d+%d/%d*%d\n", a, b, c, d);
else if(a+b/c/d == 10) printf("%d+%d/%d/%d\n", a, b, c, d);
else if(a-b+c+d == 10) printf("%d-%d+%d+%d\n", a, b, c, d);
else if(a-b+c-d == 10) printf("%d-%d+%d-%d\n", a, b, c, d);
else if(a-b+c*d == 10) printf("%d-%d+%d*%d\n", a, b, c, d);
else if(a-b+c/d == 10) printf("%d-%d+%d/%d\n", a, b, c, d);
else if(a-b-c+d == 10) printf("%d-%d-%d+%d\n", a, b, c, d);
else if(a-b-c-d == 10) printf("%d-%d-%d-%d\n", a, b, c, d);
else if(a-b-c*d == 10) printf("%d-%d-%d*%d\n", a, b, c, d);
else if(a-b-c/d == 10) printf("%d-%d-%d/%d\n", a, b, c, d);
else if(a-b*c+d == 10) printf("%d-%d*%d+%d\n", a, b, c, d);
else if(a-b*c-d == 10) printf("%d-%d*%d-%d\n", a, b, c, d);
else if(a-b*c*d == 10) printf("%d-%d*%d*%d\n", a, b, c, d);
else if(a-b*c/d == 10) printf("%d-%d*%d/%d\n", a, b, c, d);
else if(a-b/c+d == 10) printf("%d-%d/%d+%d\n", a, b, c, d);
else if(a-b/c-d == 10) printf("%d-%d/%d-%d\n", a, b, c, d);
else if(a-b/c*d == 10) printf("%d-%d/%d*%d\n", a, b, c, d);
else if(a-b/c/d == 10) printf("%d-%d/%d/%d\n", a, b, c, d);
else if(a*b+c+d == 10) printf("%d*%d+%d+%d\n", a, b, c, d);
else if(a*b+c-d == 10) printf("%d*%d+%d-%d\n", a, b, c, d);
else if(a*b+c*d == 10) printf("%d*%d+%d*%d\n", a, b, c, d);
else if(a*b+c/d == 10) printf("%d*%d+%d/%d\n", a, b, c, d);
else if(a*b-c+d == 10) printf("%d*%d-%d+%d\n", a, b, c, d);
else if(a*b-c-d == 10) printf("%d*%d-%d-%d\n", a, b, c, d);
else if(a*b-c*d == 10) printf("%d*%d-%d*%d\n", a, b, c, d);
else if(a*b-c/d == 10) printf("%d*%d-%d/%d\n", a, b, c, d);
else if(a*b*c+d == 10) printf("%d*%d*%d+%d\n", a, b, c, d);
else if(a*b*c-d == 10) printf("%d*%d*%d-%d\n", a, b, c, d);
else if(a*b*c*d == 10) printf("%d*%d*%d*%d\n", a, b, c, d);
else if(a*b*c/d == 10) printf("%d*%d*%d/%d\n", a, b, c, d);
else if(a*b/c+d == 10) printf("%d*%d/%d+%d\n", a, b, c, d);
else if(a*b/c-d == 10) printf("%d*%d/%d-%d\n", a, b, c, d);
else if(a*b/c*d == 10) printf("%d*%d/%d*%d\n", a, b, c, d);
else if(a*b/c/d == 10) printf("%d*%d/%d/%d\n", a, b, c, d);
else if(a/b+c+d == 10) printf("%d/%d+%d+%d\n", a, b, c, d);
else if(a/b+c-d == 10) printf("%d/%d+%d-%d\n", a, b, c, d);
else if(a/b+c*d == 10) printf("%d/%d+%d*%d\n", a, b, c, d);
else if(a/b+c/d == 10) printf("%d/%d+%d/%d\n", a, b, c, d);
else if(a/b-c+d == 10) printf("%d/%d-%d+%d\n", a, b, c, d);
else if(a/b-c-d == 10) printf("%d/%d-%d-%d\n", a, b, c, d);
else if(a/b-c*d == 10) printf("%d/%d-%d*%d\n", a, b, c, d);
else if(a/b-c/d == 10) printf("%d/%d-%d/%d\n", a, b, c, d);
else if(a/b*c+d == 10) printf("%d/%d*%d+%d\n", a, b, c, d);
else if(a/b*c-d == 10) printf("%d/%d*%d-%d\n", a, b, c, d);
else if(a/b*c*d == 10) printf("%d/%d*%d*%d\n", a, b, c, d);
else if(a/b*c/d == 10) printf("%d/%d*%d/%d\n", a, b, c, d);
else if(a/b/c+d == 10) printf("%d/%d/%d+%d\n", a, b, c, d);
else if(a/b/c-d == 10) printf("%d/%d/%d-%d\n", a, b, c, d);
else if(a/b/c*d == 10) printf("%d/%d/%d*%d\n", a, b, c, d);
else if(a/b/c/d == 10) printf("%d/%d/%d/%d\n", a, b, c, d);
ちなみに手元では完成してますが、面白いですねこれ。
組み方によっては別解全部表示できますし。
iPhoneアプリとかであったら嬉しいかも。
この回答への補足
値を取り出すまではできました。
以下のプログラム文に結果が10になる四則演算を表示させるとしたらどのように追加したらよろしいですか?
たしか小町演算というのを使うらしいですが、使い方がわかりません。
for文がいくつも連続してるらしいですが。
#include<stdio.h>
int main(void)
{
char num[10];
int val[4];
int i;
printf("式:");
scanf("%s",num);
for(i=0;i<4;i++){
val[i] = 0;
}
for(i=0; i<4; i++){
if((num[i] >= '1') && (num[i] <= '9')){/*1から9の数値が入ったならば*/
val[i] = num[i]-'0';
}
}
for(i=0; i<4; i++){
printf("答え%d:%d\n",i,val[i]);
}
return 0;
}
No.2
- 回答日時:
何も考えずに総当りするのが簡単です。
数字の重複がないと仮定して、入力された4つの数字を並べる組合せは4×3×2×1=24通り。
4つの演算子を並べる組合せは4×4×4=64通り。
それぞれを組み合わせれば、できあがる計算式はたったの1,536通りです。
その中から計算して10になる計算式を探すだけ。
( )を使わないという前提での話ですけどね。
この回答への補足
for文をかなり多く使っていると思うのですが、数値の数に対していくつ必要ですか?
あと、並び替えるのも考慮したらどのように作ったらよろしいですか?質問ばかりで申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- その他(プログラミング・Web制作) プログラミングって本来数学的な計算をする為のものではないのですか? 学校で配られたFortran90 11 2022/08/25 22:14
- Excel(エクセル) エクセルのセルの書式設定・ユーザー定義の条件設定について 1 2022/08/17 21:56
- C言語・C++・C# C言語 ポインタ 配列 2 2022/06/02 17:29
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で四則演算を使って10を作...
-
wsprintfの書式制御文字列につ...
-
C言語です このプログラミング...
-
10個出力で改行したいのですが...
-
TeraPadの設定方法
-
万年カレンダーのC言語プログラ...
-
困ってます!Cプログラミングに...
-
4の倍数を論理演算で表す。。
-
両替プログラムなど
-
C言語で四則演算を使って結果が...
-
printf で二進表示を行いたい。
-
2の累乗を計算するプログラム...
-
C言語についてです学籍番号、名...
-
カレンダーのプログラムについて
-
switch文とscanfについて
-
一番大きい奇数を表示する
-
printf( " %2d", p * q );
-
ホームページをC言語で作りたい...
-
空Enterの扱い方
-
C言語について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語について
-
printf で二進表示を行いたい。
-
cshの文字列操作(0埋め)
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
テキストカーソル位置の取得
-
strcmp
-
unsigned int型について
-
c言語でAからZまでを表示する...
-
printf( " %2d", p * q );
-
コマンドラインに出力した文字...
-
printfの出力内の文字をdefine...
-
ホームページをC言語で作りたい...
-
コマンドプロンプトがすぐ消える
-
小数点切捨て表示
-
【C言語教えてください】sin波...
-
switch分のケースを範囲数?に...
-
二つの整数値の大小比較
-
4の倍数を論理演算で表す。。
-
defineで定数が置き換えられな...
おすすめ情報