for文を途中から読み込む

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
news

for文を途中から読み込む

#1

投稿記事 by news » 10年前

u[0]~u[n]の数列にそれぞれ0か1が入っている。
それを以下の条件で発展させて行きたい。
(1)u=0の時、u=0
(2)u=1の時、u[i+1]、u[i+2]…と数字を見ていきu[j]で初めて0が出た時u[j]=1
u[j]に1を入れれた時点でu=0を入れる

その後はそのu[j+1]の値を同じように見て行きたい

例えば
u[0]=0、u[1]=1、u[2]=1、u[3]=0、u[4]=0、u[5]=1、u[6]=0、u[7]=1、u[8]=1、u[9]=1、u[10]=0
とします。それが
01100101110
と並んでいる時、u[0]から順に数字を見ていき
u[0]=0なのでそのままu[0]=0
u[1]=1なのでu[2]、u[3]と見ていきu[3]=0なので、u[3]=1に更新し、u[1]=0に更新する
その後u[4]=0、u[5]=1と見てu[6]=0なのでu[6]=1、u[5]=0に更新する
u[7]=1なので、u[8]、u[9]、u[10]と見ていきu[10]=0なのでu[10]=1、u[7]=0に更新する

つまり
01100101110
と並んでいた数列が
00110010111
と言う風に更新されます
これのプログラムを書こうとしているのですが上手く行きません

コード:

for(i=0;i<10;i++){
 if(u[i]==0) u[i]=0;
 if(u[i]==1){
  for(k=i+1;k<10;k++){
   if(u[k]==0){
    u[k]=1;
    u[i]=0;
    break;
   }
  }
 }
}
このように考えたのですが、これだと上手く行きません…
結論としまして何が言いたいかと言うと上の例でいうところの「u[3]=1、u[1]=0に更新した後、u[2]ではなくu[4]の値からfor文のループを開始したい」と言うことです。
大変見苦しい説明で分かりづらいとは思いますが何卒宜しくお願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: for文を途中から読み込む

#2

投稿記事 by h2so5 » 10年前

コード:

for(i=1;i<=10;i++){
  u[i] = u[i-1];
}
u[0] = 0;

news

Re: for文を途中から読み込む

#3

投稿記事 by news » 10年前

h2so5さん
返信ありがとうございます。
確かにその方法なら簡単に出来ますね…
ありがとうございます!

ちなみに何ですが(2)の条件を
u=1の時、u[i+1]、u[i+2]…と数字を見ていきu[j]で初めて0が出た時u[j]=1
u[j]に1を入れれた時点でu=0を入れる
から
u=1の時、u[i+2]、u[i+4]…と2個飛ばしで数字を見ていきu[j]で初めて0が出た時u[j]=1
u[j]に1を入れれた時点でu=0を入れる

とした場合、どうしたら良いでしょうか…?
つまり先程の例で言いますと
u[0]=0なのでそのままu[0]=0
u[1]=1なのでu[3]=0なので、u[3]=1に更新し、u[1]=0に更新する
その後u[4]=0、u[5]=1と見て、u[7]、u[9]がどちらも1なのでここで終了する
01100101110

00110101110
と更新されます。

宜しくお願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: for文を途中から読み込む

#4

投稿記事 by h2so5 » 10年前

コード:

for(i=0;i<11;i++){
	if (u[i] == 1) {
		int j = i;
    	for (i+=2;i<11;i+=2) {	
    		if (u[i] == 0) {
    			u[i] = 1;
    			u[j] = 0;
    			break;
     		}
    	}
    }
}

news

Re: for文を途中から読み込む

#5

投稿記事 by news » 10年前

h2so5さん
返信ありがとうございます。
無事出来ました!ありがとうございます!

閉鎖

“C言語何でも質問掲示板” へ戻る