質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

1回答

2809閲覧

パンケーキ問題のアルゴリズム

Kohei55

総合スコア12

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

2クリップ

投稿2019/05/29 23:03

パンケーキ問題のアルゴリズム

3,7,5,6,2,4,8,1 を昇順に並べ替える.
条件 先頭の部分列を逆さにする操作しか使わないこと.
例えば,1回目は 最大値8であるため3から8を入れ替える    8,4,2,6,5,7,3,1
その次に 全体を入れ替える           1,3,7,5,6,2,4,8
2回目は 次の最大値7であるから1から7を入れ替える. 7,3,1,5,6,2,4,8
その次に 全体を入れ替える             4,2,6,5,1,3,7,8

これを繰り返していくプログラムを考えているのですが,うまく出力されません
どなたかわかりますでしょうか.

/#include <stdio.h>
/#include <stdlib.h>

void swap(int a,int b)
{
int temp;
temp = a;
a = b;
b = temp;
return;
}

void print_array(int *list,int length){
for(int i=0;i<length;i++)
printf("%d ",list[i]);
printf("\n");
}

//回転
void do_flip(int *list,int length,int num){
for(int i=0;i<--num;i++)
swap(list[i],list[num]);
}

//パンケーキ食べたい
int pancake_sort(int *list,unsigned int length){
if(length<2)
return 0;
int i,j;
int max_num_pos;
int moves=0;//ソート回数
for(i=length;i>1;i--){
max_num_pos=0;
for(j=0;j<i;j++){
if(list[j]>list[max_num_pos])
max_num_pos=j;
}
if(max_num_pos==i-1)
continue;
if(max_num_pos){
moves++;
do_flip(list,length,max_num_pos+1);
}
moves++;
do_flip(list,length,i);
}
return moves;
}

int main(int argc, char **argv){

// 初期値 int moves[7]; int list[7]={3,7,5,6,2,4,8,1}; printf("Before\n"); print_array(list,8); moves[7] = pancake_sort(list,8); printf("After\n"); print_array(list,8);

}

出力
Before
3 7 5 6 2 4 8 0 8
After
3 7 5 6 2 4 8 0 8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Q71

2019/05/29 23:34

コードはバッククォート3つの行と、バッククォート3つの行で囲って下さい。 デバッグはしましたか?特に if(max_num_pos==i-1) あたりから、自分の期待とどう違うか、確認しましたか?
guest

回答1

0

このswap関数ではスワップされません
この関数の引数は単に値のコピーが渡されるだけなんで、その中で入れ替えても、呼び出し側には影響されませんね

アドレスを渡すようにしましょう

投稿2019/05/29 23:54

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問