C/C++の宿題を片づけます 50代目
■ このスレッドは過去ログ倉庫に格納されています
0884デフォルトの名無しさん
2005/10/03(月) 20:23:11next_set() 内の論理がわからなかったので書き替えました。rev() は使ってません。
void uppersort(int *a, int limit)
{ /* バブルソート:手抜き */
for(int c=0; c<=limit; c++) {
for(int b=1; b<=limit; b++) {
if(a[b]>a[b-1])
swp(a+b-1, a+b);
}
}
return;
}
int next_set(int *a,int n){
int maxi;
for(int i=1; i<n; i++) {
if(a[i-1]>a[i]) { /* 昇順になっている最下桁対を見つける */
maxi=-1;
for(int j=0; j<i; j++) { /* 該当部を次の数字に置き換える */
if(a[j]>a[i] && (maxi==-1 || a[j]<a[maxi]))
maxi=j;
}
swp(a+i, a+maxi);
uppersort(a,i-1); /* 該当部より下の桁は昇順に初期化 */
return 0;
}
}
return -1;
}
■ このスレッドは過去ログ倉庫に格納されています