-6

2 つの関数を使用して 1 から 100 までの素数 (1 行に 5 つの数字ごと) を出力するプログラムを作成する必要があります。

私はそのコードを書きましたが、100より前の最後の素数のみを出力するだけでうまくいきませんでした

ありがとう^_^

#include "stdafx.h"

bool is_odd(int x)
{
    if (x%2==0)
        return false;
    else
        return true;
}

bool is_prime(int x)
{
    int j=0;
    if (!(is_odd(x)))
        return false;

    if(is_odd(x))
    {
        for(int i=1;i<=x;i++)
            if (x%i==0)
                j=j+1;

        if (j==2)
            return true;
        else
            return false;
    }
}


void main()
{
    int x[100][100];
    int i=1;    

    while (i<=100) 
    {
        for(int j=1;j<=20;j++)
            for(int k=1;k<=5;k++)
                if (is_prime(i))
                    x[j][k]=i;
        i++;
    }
    for(int j=1;j<=20;j++)
    {
        for(int k=1;k<=5;k++)
            cout<<x[j][k]<<' ';
        cout<<endl;
    }
}
4

2 に答える 2

1

ループの各反復中iに、配列のすべての要素を設定しx、最後にそれを出力するため、最後の数値(97)が出力されます。当然、得られるのは最後の素数だけです。素数のみを印刷し、グリッドを維持したい場合は、if (is_prime(i))句に対して次のようなことを行う必要があります。

if (is_prime(i)) {
    x[numPrimes / 5][numPrimes % 5] = i;
    numPrimes ++;
}
于 2012-11-15T16:39:06.203 に答える
1

単純な問題のためのそのような驚くべき複雑さ。多次元配列でさえ、これを行うために配列は必要ありません。

int main()
{
    int count = 0;
    for (int i = 1; i <= 100; ++i)
    {
        if (is_prime(i))
        {
            cout << i << ' ';
            ++count;
            if (count == 5)
            {
                cout << endl;
                count = 0;
            }
        }
    }
    cout << endl;
}
于 2012-11-15T16:43:00.330 に答える