平成23年特別午後問8

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
よしあしさん  
(No.1)
https://www.fe-siken.com/kakomon/23_toku/pm08.html


問題文中のプログラムを参考に
自分でプログラムを組んで確かめてみたところ
以下のような出力になりました。

<出力>
  1  1  1  0  0
  1  1  0  1  0
  1  0  1  1  0
  0  1  1  1  0
  0  1  1  0  1
  0  1  0  1  1
  0  0  1  1  1

※1 1 0 0 1  と  1 0 1 0 1   と  1 0 0 1 1  が出力されません。

コードを眺めても、そうなるよな~という感じで原因がわかりません。。。
勘違いしている場所を指摘してもらえれば幸いです。
  
2020.12.13 23:13
柴犬さん 
(No.2)
ソースコードが無いので指摘しようがないです。
予想だけで行くと
先頭が1かつ末端1の配列が弾かれているので、
繰り返しの条件かreturnの位置が間違ってそうな気がします。
2020.12.14 11:08
よしあしさん  
(No.3)
この投稿は投稿者により削除されました。(2020.12.14 21:08)
2020.12.14 21:08
よしあしさん  
(No.4)
柴犬さん

ソースコードを以下に貼り付けます。
いろいろ手を加えていたら最初とも違う出力になってしまいました…

///-------ソースコード---------///

#include <stdio.h>

int init(int s[],int n, int k){
     int l;
     int i;

     if(1<=k && k<=n){
         for(l=0; l<n; l++){
              if(l<k){
                 s[l] = 1;
              }else{
                 s[l] = 0;
              }
          }
          return 0;
      }
      return -1;
    }

int next(int s[], int n){
   int c,l,r;
   c=0;
   l=0;
   r=-1;

   while(l<n && r==-1){
      if(s[l]==1){
         if(s[l+1]==0){
            s[l]=0;
            s[l+1]=1;
            init(s,l-1,c);
            r=0;
         }else{
            c+=1;
         }
      }
      l+=1;
   }
   return r;
}

int main(void){
   int s[5];
   int k,n,r,i;

   k=3;
   n=5;

   r=init(s,n,k);

   while(r==0){ 
      for(i=0; i<5; i++) printf("%2d",s[i]);
      puts("");
      r=next(s,n);
   }
   return 0;
}
2020.12.14 21:14
柴犬さん 
(No.5)
この投稿は投稿者により削除されました。(2020.12.16 14:46)
2020.12.16 14:46
柴犬さん 
(No.6)
next関数内にある
  while(l<n && r==-1){
かなぁ
独自の規約でlを0~にして作ってるのは良き(*‘ω‘ *)

危うく答え全部言ってしまうところだった
2020.12.16 14:57
よしあしさん  
(No.7)
間違っている場所がわかりました。
ありがとうございました!
2020.12.19 09:57

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop