奇数数列

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

奇数数列

#1

投稿記事 by ライトニング » 8年前

何回も質問失礼します。
トピックの貼り方が分からなかったので「格納」というトピックの関連で少し分からないことがあるので質問させてもらいます。
(3,5,9,23,43,101....)のような前の値を全て足しあわせたものより大きい奇数数列に
(1,2,4,8,16,32....)初項1の等比2の数列を 奇数数列の大きい値から等比数列の初項をかけていきたいのですがうまく出来ない状態です。
例: 上の数列だと 1*101 ,2*43, 4*23 ,8*9,5*16,3*32...の計算結果の数列を表示させたい状態です。

コード:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define NUM 10
 
int get_rand(void)
{
    return rand() % 10 + 1;
}
 
int main(void)
{
    int i,z,sum,sim,kakunou[NUM];
    int a[10];
    a[1]=1;
    sim=a[1];
    for(i=2;i<=10;i++){
    a[i]=a[i-1]*2;
    sim+=a[i];
    }
   {
 srand((unsigned int)time(NULL));
 
    sum = 0;
    for (z = 0; z < NUM; z++)
    {
        int suretu = sum + get_rand()+1;
        sum = sum + suretu;
        kakunou[z] = suretu;
       printf(" %d,",kakunou[i]);
    }
    {
  for(i=10-1;i>=0;i--){
  printf(" %d,",a[i]);
  printf(" %d,\n",kakunou[i]*a[i]);
}
      
       
    }
}
  {
    return 0;
  }
}
ご指摘お願いします。

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

Re: 奇数数列

#2

投稿記事 by box » 8年前

ライトニング さんが書きました: (3,5,9,23,43,101....)のような前の値を全て足しあわせたものより大きい奇数数列に
(1,2,4,8,16,32....)初項1の等比2の数列を 奇数数列の大きい値から等比数列の初項をかけていきたいのですがうまく出来ない状態です。
....
が続くんだったら
ライトニング さんが書きました: 例: 上の数列だと 1*101 ,2*43, 4*23 ,8*9,5*16,3*32...の計算結果の数列を表示させたい状態です。
こういうかけ算にはならないのでは?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

Re: 奇数数列

#3

投稿記事 by box » 8年前

ライトニング さんが書きました: (3,5,9,23,43,101....)のような前の値を全て足しあわせたものより大きい奇数数列に
(1,2,4,8,16,32....)初項1の等比2の数列を 奇数数列の大きい値から等比数列の初項をかけていきたいのですがうまく出来ない状態です。
どちらの数列も例えば10個続くんだったら、
0番目と9番目の積
1番目と8番目の積
2番目と7番目の積
...
9番目と0番目の積

という風に、
m番目とn番目の積の
(m + n)
が(数列の項数 - 1)になることを利用すればいいのではないでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

かずま

Re: 奇数数列

#4

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

ライトニング さんが書きました:ご指摘お願いします。
インデントが無茶苦茶で、平気なのですか?
私は、中身を見る気になりません。
できれば、indent -kr -ts4 で整形してから、投稿してもらえませんか?

int a[10]; と宣言したら、使えるのは a[0]~a[9] です。a[10] は使えません。

コード:

#include <stdio.h>   // printf
#include <stdlib.h>  // srand, rand
#include <time.h>
 
#define N 10
 
void print(const char *name, const int *a)
{
    int i;
    printf(" %s = (%d", name, a[0]);
    for (i = 1; i < N; i++) printf(", %d", a[i]);
    printf(")\n");
}

int main(void)
{
    int a[N], b[N], c[N], sum, i, j;

    srand(time(0));

    for (a[0] = i = 1; i < N; i++)
        a[i] = 2 * a[i-1];

    for (sum = i = 0; i < N; i++) {
        int t = sum + rand() % 10 + 1;
        sum += b[i] = (t & 1) ? t : ++t;
    }
    for (j = N, i = 0; i < N; i++)
        c[i] = a[i] * b[--j];

    print("a", a); print("b", b); print("c", c);
    return 0;
}

ライトニング

Re: 奇数数列

#5

投稿記事 by ライトニング » 8年前

ご指摘ありがとうございます。
参考にさせてもらいます。

閉鎖

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