C言語で、すべての桁が異なる0以外の4桁の整数を生成するための小さなプログラムを作成しようとすると返される値は常に1abcのようなパターンになります。最初の数字は常に1と思われますが、戻り値は56127254のように4桁以上になることがあります。事前にどうもありがとうございました。すべての桁が区別できる4桁の整数を生成しようとすると奇妙なパターンが発生する
基本的に、プログラムには2つの機能、int isvalid(int n)
とint choose_N(void)
が含まれています。
isValid
整数が正確に4桁の10進数字で構成されていて、これらの数字はすべて0ではない、別の数字である場合は0、それ以外の場合は0です。
int choose_N(void)
は、4桁の整数を生成し、すべての桁は別個で非ゼロです。ここで
が私のコードです:srand(time(0));
については
#define N_DIGITS 4
....
....//the main function
int isvalid(int n){
int i, x; int check[N_DIGITS]={0};
for(i=1;i<=N_DIGITS;i++){ //check whether all digits are nonzero
if((check[i-1]=n%10)==0){
return 0;
}
n /= 10;
}
for(i=0;i<N_DIGITS-1;i++){ // check whether all digits are distinct
for(x=i+1;x<N_DIGITS;x++){
if(check[i]==check[x])
return 0;
}
}
return 1;
}
int choose_N(void){
int i; int number=0;
while(!isvalid(number)){
for(i=0;i<N_DIGITS;i++){
srand(time(0));
number += ((10^i)*(rand()%10));
}
}
return number;
}
、私はsrand(time(0)+i);
のような様々な選択肢を試してみましたかwhile
ループの外にこの文を置くが、これらの試みは、一見、まだchoose_N
の戻り値を仕事とはまだしませんでしたしています私が記述した厄介なパターンを示しました。
ちょっと '10^i'ありません –
申し訳ありませんが、私はちょうど' N_DIGITS'は整数定数4であることを書くのを忘れて、 "私は10パワー"。私は編集しました。 –
'srand'を複数回呼び出さないでください。 https:// stackoverflow。com/questions/7343833/srand-why-call-it-only-once –