tea_sheep の回答履歴
- 配列に順列を入れ、その順列を使いルール通りの組合せを作るには
配列nを用意して、2*nの配列に1~Z、又は1~9までの数字を格納します。3の場合、123,132,213,231,312,321の順列で、ルールは1の時は1つ間を空けて1を、2の時は2つ間を空けて2を・・・ つまり、3の場合は 231213,312132 の二つがルールと合致しているので答えとなります。 1~Zまでで、上記のようにルールに当てはまる場合のみを出力するプログラムを書きたいのですがうまくいきません。下に考えてみたものを載せます。どなたか分かる方ご教授願います。 #include<stdio.h> int p[99]={0},a[99]={0}; int n; int count; main(){ int i; void perm(int k); while(1){ scanf("%d",&n); if(n<=0){break;} for(i=1;i<=n;i++){p[i]=i;} count=0; perm(1); } } void perm(int k){ int i,w; if(k>n){ count++; for(i=1;i<=n;i++){a[i]=p[i];} for(i=1;i<=n;i++){a[i+a[i]+1]=a[i];} printf("[%d]:",count); for(i=1;i<=2*n;i++){printf("%3d",a[i]);} printf("\n"); } else{ for(i=k;i<=n;i++){ w=p[k];p[k]=p[i];p[i]=w; perm(k+1); w=p[k];p[k]=p[i];p[i]=w; } } }
- 配列に順列を入れ、その順列を使いルール通りの組合せを作るには
配列nを用意して、2*nの配列に1~Z、又は1~9までの数字を格納します。3の場合、123,132,213,231,312,321の順列で、ルールは1の時は1つ間を空けて1を、2の時は2つ間を空けて2を・・・ つまり、3の場合は 231213,312132 の二つがルールと合致しているので答えとなります。 1~Zまでで、上記のようにルールに当てはまる場合のみを出力するプログラムを書きたいのですがうまくいきません。下に考えてみたものを載せます。どなたか分かる方ご教授願います。 #include<stdio.h> int p[99]={0},a[99]={0}; int n; int count; main(){ int i; void perm(int k); while(1){ scanf("%d",&n); if(n<=0){break;} for(i=1;i<=n;i++){p[i]=i;} count=0; perm(1); } } void perm(int k){ int i,w; if(k>n){ count++; for(i=1;i<=n;i++){a[i]=p[i];} for(i=1;i<=n;i++){a[i+a[i]+1]=a[i];} printf("[%d]:",count); for(i=1;i<=2*n;i++){printf("%3d",a[i]);} printf("\n"); } else{ for(i=k;i<=n;i++){ w=p[k];p[k]=p[i];p[i]=w; perm(k+1); w=p[k];p[k]=p[i];p[i]=w; } } }
- 配列に順列を入れ、その順列を使いルール通りの組合せを作るには
配列nを用意して、2*nの配列に1~Z、又は1~9までの数字を格納します。3の場合、123,132,213,231,312,321の順列で、ルールは1の時は1つ間を空けて1を、2の時は2つ間を空けて2を・・・ つまり、3の場合は 231213,312132 の二つがルールと合致しているので答えとなります。 1~Zまでで、上記のようにルールに当てはまる場合のみを出力するプログラムを書きたいのですがうまくいきません。下に考えてみたものを載せます。どなたか分かる方ご教授願います。 #include<stdio.h> int p[99]={0},a[99]={0}; int n; int count; main(){ int i; void perm(int k); while(1){ scanf("%d",&n); if(n<=0){break;} for(i=1;i<=n;i++){p[i]=i;} count=0; perm(1); } } void perm(int k){ int i,w; if(k>n){ count++; for(i=1;i<=n;i++){a[i]=p[i];} for(i=1;i<=n;i++){a[i+a[i]+1]=a[i];} printf("[%d]:",count); for(i=1;i<=2*n;i++){printf("%3d",a[i]);} printf("\n"); } else{ for(i=k;i<=n;i++){ w=p[k];p[k]=p[i];p[i]=w; perm(k+1); w=p[k];p[k]=p[i];p[i]=w; } } }
- インクリメント演算子
はじめまして。プログラミングについて、とても初歩的な所で つまづいています。 変数を一つだけかつ、インクリメント演算子のみを用いて 整数値を一つ入力し,その整数値を1ずつ増やした結果を出す 4,5,6,7,8 (←このようにしたい) というプログラミングを書きたいのですが、どこのサイトを見ても 5個の文字の例はありませんでした。 2個までは以下の例でできました。 #include <stdio.h> main() { int a; printf("整数値を入力"); scanf("%d",&a); printf("1ずつ増加%d,%d,\n",a++,a); } もう、この問題で何日も立ち止まっています。 お願いです、どなたか助けてください。
- 配列に順列を入れ、その順列を使いルール通りの組合せを作るには
配列nを用意して、2*nの配列に1~Z、又は1~9までの数字を格納します。3の場合、123,132,213,231,312,321の順列で、ルールは1の時は1つ間を空けて1を、2の時は2つ間を空けて2を・・・ つまり、3の場合は 231213,312132 の二つがルールと合致しているので答えとなります。 1~Zまでで、上記のようにルールに当てはまる場合のみを出力するプログラムを書きたいのですがうまくいきません。下に考えてみたものを載せます。どなたか分かる方ご教授願います。 #include<stdio.h> int p[99]={0},a[99]={0}; int n; int count; main(){ int i; void perm(int k); while(1){ scanf("%d",&n); if(n<=0){break;} for(i=1;i<=n;i++){p[i]=i;} count=0; perm(1); } } void perm(int k){ int i,w; if(k>n){ count++; for(i=1;i<=n;i++){a[i]=p[i];} for(i=1;i<=n;i++){a[i+a[i]+1]=a[i];} printf("[%d]:",count); for(i=1;i<=2*n;i++){printf("%3d",a[i]);} printf("\n"); } else{ for(i=k;i<=n;i++){ w=p[k];p[k]=p[i];p[i]=w; perm(k+1); w=p[k];p[k]=p[i];p[i]=w; } } }
- 配列に順列を入れ、その順列を使いルール通りの組合せを作るには
配列nを用意して、2*nの配列に1~Z、又は1~9までの数字を格納します。3の場合、123,132,213,231,312,321の順列で、ルールは1の時は1つ間を空けて1を、2の時は2つ間を空けて2を・・・ つまり、3の場合は 231213,312132 の二つがルールと合致しているので答えとなります。 1~Zまでで、上記のようにルールに当てはまる場合のみを出力するプログラムを書きたいのですがうまくいきません。下に考えてみたものを載せます。どなたか分かる方ご教授願います。 #include<stdio.h> int p[99]={0},a[99]={0}; int n; int count; main(){ int i; void perm(int k); while(1){ scanf("%d",&n); if(n<=0){break;} for(i=1;i<=n;i++){p[i]=i;} count=0; perm(1); } } void perm(int k){ int i,w; if(k>n){ count++; for(i=1;i<=n;i++){a[i]=p[i];} for(i=1;i<=n;i++){a[i+a[i]+1]=a[i];} printf("[%d]:",count); for(i=1;i<=2*n;i++){printf("%3d",a[i]);} printf("\n"); } else{ for(i=k;i<=n;i++){ w=p[k];p[k]=p[i];p[i]=w; perm(k+1); w=p[k];p[k]=p[i];p[i]=w; } } }
- 配列に順列を入れ、その順列を使いルール通りの組合せを作るには
配列nを用意して、2*nの配列に1~Z、又は1~9までの数字を格納します。3の場合、123,132,213,231,312,321の順列で、ルールは1の時は1つ間を空けて1を、2の時は2つ間を空けて2を・・・ つまり、3の場合は 231213,312132 の二つがルールと合致しているので答えとなります。 1~Zまでで、上記のようにルールに当てはまる場合のみを出力するプログラムを書きたいのですがうまくいきません。下に考えてみたものを載せます。どなたか分かる方ご教授願います。 #include<stdio.h> int p[99]={0},a[99]={0}; int n; int count; main(){ int i; void perm(int k); while(1){ scanf("%d",&n); if(n<=0){break;} for(i=1;i<=n;i++){p[i]=i;} count=0; perm(1); } } void perm(int k){ int i,w; if(k>n){ count++; for(i=1;i<=n;i++){a[i]=p[i];} for(i=1;i<=n;i++){a[i+a[i]+1]=a[i];} printf("[%d]:",count); for(i=1;i<=2*n;i++){printf("%3d",a[i]);} printf("\n"); } else{ for(i=k;i<=n;i++){ w=p[k];p[k]=p[i];p[i]=w; perm(k+1); w=p[k];p[k]=p[i];p[i]=w; } } }
- 配列に順列を入れ、その順列を使いルール通りの組合せを作るには
配列nを用意して、2*nの配列に1~Z、又は1~9までの数字を格納します。3の場合、123,132,213,231,312,321の順列で、ルールは1の時は1つ間を空けて1を、2の時は2つ間を空けて2を・・・ つまり、3の場合は 231213,312132 の二つがルールと合致しているので答えとなります。 1~Zまでで、上記のようにルールに当てはまる場合のみを出力するプログラムを書きたいのですがうまくいきません。下に考えてみたものを載せます。どなたか分かる方ご教授願います。 #include<stdio.h> int p[99]={0},a[99]={0}; int n; int count; main(){ int i; void perm(int k); while(1){ scanf("%d",&n); if(n<=0){break;} for(i=1;i<=n;i++){p[i]=i;} count=0; perm(1); } } void perm(int k){ int i,w; if(k>n){ count++; for(i=1;i<=n;i++){a[i]=p[i];} for(i=1;i<=n;i++){a[i+a[i]+1]=a[i];} printf("[%d]:",count); for(i=1;i<=2*n;i++){printf("%3d",a[i]);} printf("\n"); } else{ for(i=k;i<=n;i++){ w=p[k];p[k]=p[i];p[i]=w; perm(k+1); w=p[k];p[k]=p[i];p[i]=w; } } }
- scanf()関数の使い方について
はじめまして。 質問があります。 以下のコードを見てください。 ---------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> int main(void) { int i; char buf[256]; int y; int m; int d; printf("文字列を入力してください:"); scanf("%s",buf); i = sscanf(buf,"%d/%d/%d",&y,&m,&d); //OK #if 0 i = sscanf(buf,"%d %d %d",&y,&m,&d); //NG #endif printf("日付 %d-%d-%d 戻り値i=%d\n",y,m,d,i); return EXIT_SUCCESS; } ---------------------------------------------------------------- 標準入力から日付を表す文字列「例:"2007/04/17"」を入力してbufに 格納したものをsscanf関数の第1引数に指定して、y,m,dを表示 させてみると、「i = sscanf(buf,"%d/%d/%d",&y,&m,&d)」では、 うまくyとmとdに日付が格納される(つまり、yに2007が入り、mには 04が入り、dには17が入る。)のですが、 「i = sscanf(buf,"%d %d %d",&y,&m,&d);」でbufに格納すると、 yにはうまく格納されるのですが、他のmとdには、うまく格納してくれ ません。これは、なぜなのでしょうか? ご教授お願いします。
- ベストアンサー
- C・C++・C#
- takeshix100
- 回答数2
- CSVファイルの内容を構造体に格納したい(Unix使用)。
こんにちは。私は30代の男性です。 「名前」「身長」「体重」が記載されたCSVファイルの内容を読み取って、構造体の「name」「height」「weight」に格納するプログラムを作っています。CSVの内容は A,175,80 B,167,89 C,155,45 ・ ・ ・ Z,188,70 だと仮定します。数値が読み取れているか、下記のように「tp = strtok(file_image, ",\n" );」の前後に「printf("%s\n", file_image);」を置いてみたら、strtok前では全て表示されるのに、strtok後では「ABC」しか表示されません。これでは全てのデータを構造体に格納できないので、困っています。 1.どのようにすれば、数字も取り出せる(読み取れる)でしょうか? 2.効率よく構造体に格納するには、どのようにしたらよいでしょうか? アドバイスを頂ければ幸いです。宜しくお願いいたします。 #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> int main(int argc, char *argv[]) { FILE *fp = NULL; int rtn = 0; if ((fp = fopen(argv[1], "r")) == NULL) { printf("ファイルオープンに失敗しました。\n"); return 1; } if (argc != 2) { printf("ERROR: オプションの数に過不足があります。\n"); return 1; } rtn = change_csv(fp); return 0; } int change_csv(FILE *fp) { int i; int j; char file_image[256]; /* 読み込んだ先のメモリの領域 */ char *tp; for (i = 0; i <= 256; i++) { if (fgets(file_image, 256, fp) == NULL) { if (ferror(fp) != 0) { printf("ERROR: 読み込みに失敗しました。\n"); return 1; } } if (feof(fp) != 0) { break; } printf("%s\n", file_image); tp = strtok(file_image, ",\n" ); printf("%s\n", file_image); } fclose(fp); return 0; }
- C言語の初歩的な問題です。
現在C言語の入力の部分を勉強しているのですが 数字の入力をもらってから、それが数字じゃない場合 もう一度入力を受けるようなものを作りたいのですが、 うまく数字なのか文字なのかが判定できなくてこまっています。 どうすればいいのでしょうか? int n; int flag = 0; do{ printf("value:"); scanf("%d",&n); if(入力された値が数字であった場合) { flag = 1; } }while(flag == 0);
- ベストアンサー
- C・C++・C#
- PGbeginner
- 回答数6
- コールバック関数とは…(C言語)
関数をコールバックするのと、 関数を直接呼ぶのとではどう違うのでしょうか? ※質問がおかしかったらすいません。
- 締切済み
- C・C++・C#
- akaruimirai01
- 回答数4
- C言語の配列のサイズ
二次元配列、三次元配列のサイズが知りたいです。 unsigned char test1[100]; は sizeof( test1 )で100ですが、 unsigned char test1[100][30]; はどのように書いたら100または、30なのか知りたいです。 unsigned char test1[100][30][5]; これも100,30,5のサイズをそれぞれ得る方法が知りたいです。 因みに以下のような数値なし[]を見たことがあるのですが どういう意味でしょうか? unsigned char test1[][30]; サイズを理解していないのは、ポインタを理解していないと同じことでしょうか?今更ながら自分自身が不安です。
- fscanfを使った入力方法.ミスはどこ?
簡単な内容で申し訳ありませんが,お願いします. インプットファイルからデータを入力したいのですが, うまくいきません.以前は同様の書き方で入力できたので, どこがおかしいのか分かりません.慣れた方にはすぐに 見つけられるのでしょうが,どこかに違いがあるのか 探せず困っています.ミスを教えていただけませんか? -------------------- double dlt1; dlt2以下も同様にdoubleで定義. FILE *input; input=fopen("input.txt","r"); fscanf(input,"%f",&dlt1); fscanf(input,"%f",&dlt2); fscanf(input,"%f",&dlt3); fscanf(input,"%f",&dlt4); 以下,同じように20個ほどの 入力値が続きます. fclose(input); 以下,計算が続きます. -------------------- input.txtの中身は以下のようになっています. ------ 1. 0.136 10. 2.8e-10 以下同様の数字が続く. ------
- 右上のXボタンで終了させた子ウィンドウを再表示させるには
単純にVisibleをtrueにすればよいのでしょうか? メモリの解放は行われていない(タスクマネージャで確認)ようですし、 今のところ問題なく動いていますが、不安定にならないか心配になりました。 開発環境はBorlandC++Builderです。 よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- archer_archer
- 回答数2
- ループカウンタを使用せず、配列の全てを足したい
質問です。 配列を使い、その値の合計値を出す際に私はループカウンタを利用して足す手法を 思いつくのですが、それ以外の方法があると聞きました。 ですが、それ以外の方法が思いつかなく質問させてください。 int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int nSum = 0; for ( int i = 0; i < 10; i++ ) { nSum += a[i]; } return nSum; ここでループカウンタを使用せず、配列の全てを足すにはどうしたら良いでしょうか。
- 1
- 2