奇数nに対してn次の魔方陣を作るプログラムを、誰か教えてください。

A 回答 (1件)

参考URLのあたりで探してみてください。


アドバイスですみません。

参考URL:http://peacock.pse.che.tohoku.ac.jp/~msuzuki/mag …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q作るのは難しいけど、食べるのは簡単な料理って、何ですか?

作るのは難しい、面倒くさいけど、出来上がったら食べるのは簡単な料理って何でしょうか?
私だったら、餃子でしょうか・・・

Aベストアンサー

茶碗蒸しですね。蒸し器使うし、後片付けもあるし。
私の実家では面倒くさがって、年に一度正月しか作りません。
おかげで、おせち料理だと勘違いしてました。

QC言語についてです 整数nを入力すると、1+2+3...+nの 合計値を出力するプログラムを作りたい

C言語についてです
整数nを入力すると、1+2+3...+nの
合計値を出力するプログラムを作りたいの
ですが
これではなぜできないのでしょうか?

Aベストアンサー

初心者がよくやる間違いです。
気をつけましょう。


教科書等には
 for(〜) { 処理 }  で「処理」を繰り返す
等と書いてありますが、処理が1命令だけの場合
 for(〜) 命令 ;
と書くこともできます。この場合、forの条件に従って「命令」を繰り返すことになります。
この命令には「何もしない」命令、つまり、「空白」も該当します。
つまり
 for(〜);
で、「何もしない」を繰り返すfor文となります。

また、 {} は、 forとか if とかの後でなくても利用できます。
そのときには{文1;文2;...} といいた複数の文を、一つの文として扱う、という意味になります。
これは、 { } をはずしたのと同等です。 (forとかifとかの後等の特定の条件でなければ)

つまり
for(〜) { 処理 }
のつもりで
for(〜) ; { 処理 }
と書いてしまうと

for(〜) ; で「何もしない命令」を繰り返し実行
↓その後
{処理}を (1回だけ)実行

となります。



※ なお、上記は理解しやすいように、ちょっと不正確な部分があります。

初心者がよくやる間違いです。
気をつけましょう。


教科書等には
 for(〜) { 処理 }  で「処理」を繰り返す
等と書いてありますが、処理が1命令だけの場合
 for(〜) 命令 ;
と書くこともできます。この場合、forの条件に従って「命令」を繰り返すことになります。
この命令には「何もしない」命令、つまり、「空白」も該当します。
つまり
 for(〜);
で、「何もしない」を繰り返すfor文となります。

また、 {} は、 forとか if とかの後でなくても利用できます。
そのときには{文1;文2;...} といいた複数...続きを読む

Q自分で作る野菜ジュースって野菜をそのまま食べるのとほとんど同じ満腹感に

自分で作る野菜ジュースって野菜をそのまま食べるのとほとんど同じ満腹感になりますか?

Aベストアンサー

噛む(咀嚼する)という行為は、唾液を食物に混ぜて消化を助け糖分を発生させ、満腹感をすぐに得ることが出来ます。
また、咀嚼する行為は脳に刺激を与えて、食べる満足を与えてくれます。
液体にして飲み込むと、唾液の出方が違うので胃袋を早く通過しやすくなり、満腹感は得られにくいです。

Q偶数次魔方陣のプログラム

偶数次魔方陣の場合、規則性がないと言われていますが、やはりないのでしょうか?
今4次、6次、8次、の三つだけだせれば良いのですが、処理は全て共通という訳にはいかずに、やはりif文やswitch文などで別々に作らなければいけないのでしょうか?
共通があればそのプログラムを、なければ別々のプログラムも参考にさせて頂きたいと考えています。
よろしくお願いします。

Aベストアンサー

「全部求める」わけじゃないと仮定して:
4の倍数次のものは簡単で, かつ規則性もあります.
4の倍数でない偶数次だと面倒. それなりに方法はありますが.

参考URL:http://www.geocities.jp/ikuro_kotaro/koramu/264_magic3.htm

Q僕作る人、私食べる人

かつて、何かの食品のテレビ宣伝で
「私作る人、僕食べる人」という台詞を男女に割り振った設定にしたら、ジェンダー的な観点から文句ゴウゴウだったそうです。
質問は、仮にもしこれが、男女の設定を逆にしたものだったら、文句なかったんでしょうか?

Aベストアンサー

そんなに単純じゃないと思います。

「僕作る人、私食べる人」という台詞はどう感じられますか?

(男性は本来食べる人なのに作るんだ、へぇー。女性は本来作る人なのに食べるんだ、ふうん。新鮮なカップルだなー。)と感じ、印象に残りませんか?
そういうところで興味を引こうとするCMがあれば、見せ方によっては(男性が自虐的で女性が威張ってるような図だと)、その魂胆は、
男性は本来食べる人、女性は本来作る人、という固定観念を
多くの消費者が持っていることを期待していることになります。
文句ゴウゴウはなくても、専門家は指摘するかもしれません。

ちょっと似ている話で、
サラリーマン川柳に毎年出る自虐テーマに朝のゴミ出しがあります。
男性がゴミ出しをするのを情けない情景として詠っています。
本来、男性がやるものでないゴミ出しをやっている、かっこ悪い、とほほ、女性の天下だな。という意味です。
2つの固定観念があります。
・ゴミ出しは情けない
・ゴミ出しは女性がやるもの
ゴミ出しは朝の洗顔と変わらない普通の行為であって、男女立場問わず朝出かける人が出すのが合理的で当たり前、と皆が思っているなら、
川柳で上位入賞などならないでしょう。
しかし、こういう川柳が毎年発表されているのを見ると、
ジェンダー的な文句ゴウゴウは来ていないようです。

そんなに単純じゃないと思います。

「僕作る人、私食べる人」という台詞はどう感じられますか?

(男性は本来食べる人なのに作るんだ、へぇー。女性は本来作る人なのに食べるんだ、ふうん。新鮮なカップルだなー。)と感じ、印象に残りませんか?
そういうところで興味を引こうとするCMがあれば、見せ方によっては(男性が自虐的で女性が威張ってるような図だと)、その魂胆は、
男性は本来食べる人、女性は本来作る人、という固定観念を
多くの消費者が持っていることを期待していることになります。
...続きを読む

QC言語です 整数nを入力すると1+2+....+nという計算式と 合計値を出力するプログラムを作りた

C言語です
整数nを入力すると1+2+....+nという計算式と
合計値を出力するプログラムを作りたいの
ですが
このようになってしまいます
なぜでしょうか?

Aベストアンサー

printf("+%d=",i); → printf("+%d",i);
printf("%d",sum); → printf("=%d",sum);

でそ?

Q朝お弁当を作るのが億劫です、明日食べるお弁当を今日作りたいです。 午後8時位に作った物を冷蔵庫に入れ

朝お弁当を作るのが億劫です、明日食べるお弁当を今日作りたいです。
午後8時位に作った物を冷蔵庫に入れて、明日の朝温めれば、美味しいお弁当を作れるでしょうか?

経験的にご飯と冷凍食品を一緒に温めると苦い味(薬?)がご飯に移る気がします。
気のせいでしょうか?
考え過ぎでしょうか?

Aベストアンサー

>ご飯と冷凍食品を一緒に温めると苦い味(薬?)がご飯に移る
それは冷凍食品に付着している「霜」の味ではないですかね?
冷凍食品自体は味付けが濃いためそのまま解凍しても気になりにくいですが、淡泊な白米に
それが移るとかなり明確に「不味い」と感じます。
冷凍食品は、お弁当箱へ詰める前に一度解凍して、更にご飯と直接触れないよう仕切りを設
けたほうが良いでしょう。
温めるのは翌朝ではなく食べる直前、というのはもちろんですが。

Q配列を使って魔方陣

C言語を使って最近やっと配列ができるようになってきたんですが、どうしても魔方陣のやり方がわからないんです。教えてください。

魔方陣とは、1~n^2までの整数をn×nの正方形に並べ、どの行、どの列、どの対角線のn個の数の和も一定の値になるようにしたものです。
nは常に奇数を入力し、1番上の行の中央の列に1を置く事になります。
整数kまで置かれているとすると、k+1は次のように置かれる。
* kの置かれた場所の右斜め上(以下この場所をαと呼ぶ)が空いていれば、そこにk+1を置く。
* αがすでに他の数が置かれているとき、kの置かれている場所のすぐ下にk+1を置く。
* αが右上隅にはみ出す場合は、kの置かれている場所のすぐ下にk+1を置く。
* αが1番上の行からはみ出す場合は、場所αの1番下の列にk+1を置く。
* αが1番右上の列からはみ出す場合には、場所αの1番左の列にk+1を置く。

例)n=3のとき

8 1 6
3 5 7
4 9 2

まだまだ初心者なので詳しく教えていただけると嬉しいです。よろしくお願いします。

C言語を使って最近やっと配列ができるようになってきたんですが、どうしても魔方陣のやり方がわからないんです。教えてください。

魔方陣とは、1~n^2までの整数をn×nの正方形に並べ、どの行、どの列、どの対角線のn個の数の和も一定の値になるようにしたものです。
nは常に奇数を入力し、1番上の行の中央の列に1を置く事になります。
整数kまで置かれているとすると、k+1は次のように置かれる。
* kの置かれた場所の右斜め上(以下この場所をαと呼ぶ)が空いていれば、そこにk+1を置...続きを読む

Aベストアンサー

次のコードでできると思います。n=19までは大丈夫そうでした。インデントに全角スペースを使っているので適当に置換してください。

-------------------------------------------------
#include<stdio.h>
#define SIZE 5 /*奇数を指定*/
int mahoujin[SIZE][SIZE];
int sum_yoko[SIZE], sum_tate[SIZE], sum_naname[2];

int main()
{
  int i, j;
  int row, col;

  /*初期化*/
  row = 0;
  col = SIZE / 2;
  mahoujin[row][col] = 1;

  /*配列への書き込み*/
  for (i = 2; i <= (SIZE * SIZE); i++) {
    if (row == 0 && col >= (SIZE -1))
      row++;
    else if (row == 0)
      row = (SIZE - 1), col++;
    else if (col >= (SIZE -1))
      row--, col = 0;
    else if (mahoujin[row - 1][col + 1] == 0)
      row--, col++;
    else
      row++;

    mahoujin[row][col] = i;
  }

  /*検証*/
  for (i = 0; i < SIZE; i++) {
    for (j = 0; j < SIZE; j++) {
      sum_yoko[i] += mahoujin[i][j]; /*横方向の合計を各行について計算*/
      sum_tate[i] += mahoujin[j][i]; /*縦方向の合計を各列について計算*/
    }
    sum_naname[0] += mahoujin[i][i]; /*左上から右下への合計*/
    sum_naname[1] += mahoujin[i][SIZE - 1 - i]; /*右上から左下への合計*/
  }
  for (i = 0; i < SIZE; i++) {
    if (sum_yoko[i] != sum_naname[0] || sum_tate[i] != sum_naname[0]) {
      printf("魔方陣の生成に失敗しました\n");
      return 0;
    }
  }
  if (sum_naname[0] != sum_naname[1]) {
    printf("魔方陣の生成に失敗しました\n");
    return 0;
  }

  /*画面出力*/
  printf("サイズ%dの魔方陣\n", SIZE);
  for (i = 0; i < SIZE; i++) {
    for (j = 0; j < SIZE; j++)
      printf("%4d", mahoujin[i][j]);
    printf("\n");
  }

  return 0;
}

次のコードでできると思います。n=19までは大丈夫そうでした。インデントに全角スペースを使っているので適当に置換してください。

-------------------------------------------------
#include<stdio.h>
#define SIZE 5 /*奇数を指定*/
int mahoujin[SIZE][SIZE];
int sum_yoko[SIZE], sum_tate[SIZE], sum_naname[2];

int main()
{
  int i, j;
  int row, col;

  /*初期化*/
  row = 0;
  col = SIZE / 2;
  mahoujin[row][col] = 1;

  /*配列への書き込み*/
  for (i...続きを読む

Qブリ大根は前日に作る食べる直前etcいつがいい?

タイトルそのままなのですがブリ大根を作りたいです
できあがりは食べる直前?前の日?
いつがいいでしょうか
煮物だから前の日に作ろうと思ったらお魚料理は食べる前がいいんだよって言われて
お願いします

Aベストアンサー

私もナンバー1さん同様、
食べる直前に作る。

1日置くと、魚が生臭くなる(缶詰のような味に)。

ちなみに、大根は煮えるまで時間がかかります。

私は、市販の麺つゆで煮ます。
麺つゆは日本食の万能選手です。


今年も去年同様、
ぶりが安いです\(^O^)/

養殖技術が向上したからか?

熱燗にブリ大根、最高。

私も今夜は、ブリ大根で晩酌。

Qn進数を10進数に変換するプログラムがわかりません

整数n(2<=n<=16)とn進数の数字列digitsを与えると10進数に変換して表示するプログラム
関数void base2dec(int n, string digits, int &dec)を使用する

実行例 110101(2)=53
123(8)=83
7ACE(16)=31438
以下はとりあえずつくったみたプログラムです
#include<iostream>
#include<string>
using namespace std;
void base2dec(int n, string digits, int &dec)
{
int i,x=0;
for(i=0; i=digits.size()-1; i++)
{
if(n<10)
{
x=digits[i]-'0';
}
else
{
x=digits[i]-'A'+10;
}
dec=(x*n);
if(cin >> digits[i++])
{
if(n<10)
{
dec=dec+(digits[i++]-'0');
}
else
{
dec=dec+(digits[i++]-'A'+10);
}
}
}
int value = dec;
}

int main()
{
int n,value;
string digits;
cout << "何進数ですか-->";
cin >>n;
cout << "数字列を入力してください-->";
cin >>digits;;
base2dec(n,digits,value);
cout << digits << "(" << n << ")=" << value << endl;
return 0;
}

void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。ちなみにn進数から10進数に直す方法は理解しています。

整数n(2<=n<=16)とn進数の数字列digitsを与えると10進数に変換して表示するプログラム
関数void base2dec(int n, string digits, int &dec)を使用する

実行例 110101(2)=53
123(8)=83
7ACE(16)=31438
以下はとりあえずつくったみたプログラムです
#include<iostream>
#include<string>
using namespace std;
void base2dec(int n, string digits, int &dec)
{
int i,x=0;
for(i=0; i=digits.size()-1; i++)
{
if(n<10)
{
x=digits[i]-'0';
}
else
{
...続きを読む

Aベストアンサー

★アドバイス
>for(i=0; i=digits.size()-1; i++){
 ↑
 この行がおかしいです。
 間違い⇒for(i=0; i=digits.size()-1; i++){
 正しい1⇒for(i=0; i<=digits.size()-1; i++){
 正しい2⇒for(i=0; i<digits.size(); i++){
 ※回答者 No.1 さんのアドバイス通りです。
>void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。
 ↑
 『dec=(x*n);』ここが違う気がします。
 『dec=(dec*n+x);』とすればいいと思いますけど。
>ちなみにn進数から10進数に直す方法は理解しています。
 ↑
 理解しているのなら『dec=(dec*n+x);』となると思いますが…。

その他:
>if(cin >> digits[i++]){ … }
 ↑
 このifブロック内は必要なのか?
 どういう意味。
>int value = dec;
 ↑
 最後のこの行は意味ないね。
 『value』を参照してないし。
 戻してないし。
 そもそも dec が『参照』ですよ。
 http://next1.msi.sk.shibaura-it.ac.jp/MULTIMEDIA/CPPPUBLISH/node8.html→『ポインタと参照』
 このリンクを読みましょう。
・以上。あと16進などのA~Fは大文字専用ですね。小文字だと上手く変換できませんよ。

参考URL:http://next1.msi.sk.shibaura-it.ac.jp/MULTIMEDIA/CPPPUBLISH/node8.html

★アドバイス
>for(i=0; i=digits.size()-1; i++){
 ↑
 この行がおかしいです。
 間違い⇒for(i=0; i=digits.size()-1; i++){
 正しい1⇒for(i=0; i<=digits.size()-1; i++){
 正しい2⇒for(i=0; i<digits.size(); i++){
 ※回答者 No.1 さんのアドバイス通りです。
>void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。
 ↑
 『dec=(x*n);』ここが違う気がします。
 『dec=(dec*n+x);』とすればいいと思いますけど。
>ちなみにn進数から10進数に直す方法...続きを読む


人気Q&Aランキング

おすすめ情報