c言語で配列の添え字と要素を交換するプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
po_po
記事: 38
登録日時: 8年前

c言語で配列の添え字と要素を交換するプログラム

#1

投稿記事 by po_po » 8年前

a[0]=3
a[1]=0
a[2]=1
a[3]=2
a[4]=4
というような配列の要素が重複なく、0から配列の要素数の範囲になっている配列aを
a[3]=0
a[0]=1
a[1]=2
a[2]=3
a[4]=4
といった風に添え字と要素を交換するプログラムを書きたいのですが、どのように書けばいいのか見当がつきません
方針を教えてくれると助かります

hide

Re: c言語で配列の添え字と要素を交換するプログラム

#2

投稿記事 by hide » 8年前

まずプログラムはどうでもいいので

コード:

a[0]=3
a[1]=0
a[2]=1
a[3]=2
a[4]=4

コード:

a[3]=0
a[0]=1
a[1]=2
a[2]=3
a[4]=4
にする手順を日本語で書いてみてください。

zack

Re: c言語で配列の添え字と要素を交換するプログラム

#3

投稿記事 by zack » 8年前

方法はいろいろあると思いますが、一番愚直にするなら
a[]のコピーb[]を用意してa[b] = i とすればよいのではないでしょうか?

po_po
記事: 38
登録日時: 8年前

Re: c言語で配列の添え字と要素を交換するプログラム

#4

投稿記事 by po_po » 8年前

zackさん
それだと上の例で最初にa[0] = 3がa[3] = 0になり元のa[3] = 2という情報が失われる気がしますが

box
記事: 2002
登録日時: 13年前

Re: c言語で配列の添え字と要素を交換するプログラム

#5

投稿記事 by box » 8年前

po_po さんが書きました:zackさん
元のa[3] = 2という情報が失われる気がしますが
何か不都合がありますか?

コード:

#include <stdio.h>
#include <string.h>

int main(void)
{
    int a[5] = { 3, 0, 1, 2, 4 };
    int b[5], i;

    memcpy(b, a, sizeof(a));
    for (i = 0; i < 5; i++) {
        a[b[i]] = i;
    }
    for (i = 0; i < 5; i++) {
        printf("%d ", a[i]);
    }
    putchar('\n');
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

po_po
記事: 38
登録日時: 8年前

Re: c言語で配列の添え字と要素を交換するプログラム

#6

投稿記事 by po_po » 8年前

すいません勘違いをしていました 
何も問題ありません、解決しましたありがとうございました

かずま

Re: c言語で配列の添え字と要素を交換するプログラム

#7

投稿記事 by かずま » 8年前

いろいろなやり方があります。例えば、

コード:

#include <stdio.h>
 
void proc(int *a, int i)
{
    int t;
    if (i > 0) t = a[--i], proc(a, i), a[i] = t;
}

int main(void)
{
    int a[5] = { 3, 0, 1, 2, 4 }, i;

    proc(a, 5);
    for (i = 0; i < 5; i++) printf("a[%d] = %d\n", i, a[i]);
    return 0;
}

かずま

Re: c言語で配列の添え字と要素を交換するプログラム

#8

投稿記事 by かずま » 8年前

かずま さんが書きました:いろいろなやり方があります。例えば、

コード:

    if (i > 0) t = a[--i], proc(a, i), a[i] = t;
これ、間違っています。次のように訂正します。

コード:

    if (i > 0) t = a[--i], proc(a, i), a[t] = i;

閉鎖

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