平成23年特別午後問8
よしあしさん
(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 が出力されません。
コードを眺めても、そうなるよな~という感じで原因がわかりません。。。
勘違いしている場所を指摘してもらえれば幸いです。
問題文中のプログラムを参考に
自分でプログラムを組んで確かめてみたところ
以下のような出力になりました。
<出力>
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の位置が間違ってそうな気がします。
予想だけで行くと
先頭が1かつ末端1の配列が弾かれているので、
繰り返しの条件かreturnの位置が間違ってそうな気がします。
2020.12.14 11:08
よしあしさん
(No.3)
この投稿は投稿者により削除されました。(2020.12.14 21:08)
2020.12.14 21:08
よしあしさん
(No.4)
柴犬さん
ソースコードを以下に貼り付けます。
いろいろ手を加えていたら最初とも違う出力になってしまいました…
///-------ソースコード---------///
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;
}
ソースコードを以下に貼り付けます。
いろいろ手を加えていたら最初とも違う出力になってしまいました…
///-------ソースコード---------///
#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~にして作ってるのは良き(*‘ω‘ *)
危うく答え全部言ってしまうところだった
while(l<n && r==-1){
かなぁ
独自の規約でlを0~にして作ってるのは良き(*‘ω‘ *)
危うく答え全部言ってしまうところだった
2020.12.16 14:57
よしあしさん
(No.7)
間違っている場所がわかりました。
ありがとうございました!
ありがとうございました!
2020.12.19 09:57
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告