-2

この演習では、特定の数字の合計である 1 から 500 までの数字のうち、3 乗した数字がその特定の数字に等しいものを見つけるように求められます。

たとえば、1^3=1 と 371 は 3^3+7^3+1^3 = 371 になります。

問題にどのようにアプローチしたか:

500 個のスロットを持つ文字列の配列があり、各スロットに文字列に変換された数値が含まれていれば、各スロットの文字列で計算できると考えていました。それらが私が適用する基準を満たしていれば、そのスロットが印刷されます。

関数 sprintf を試しましたが、あまり成功しませんでした。ループでは、文字列(または配列ですか?3時間後、私は混乱しています)[0]スロットを初期化し、他のすべてのスロットを変更しません。

私の論理で私を導くのではなく、あなたに演習を解いてもらいたくありません。必要に応じて、私が行ったことのコードを追加するように依頼してください。

4

2 に答える 2

4

常にアルゴリズムを明確に定義することから始めてください。そうすれば、自分が何をしているのかがわかります。それを簡単なステップに分割します。このようなもの:

For each integer i in the interval 1 to 500:
  Check if the condition holds for this i
  If it holds:
    Print i
  else:
    Do nothing

次に、「このiに条件が当てはまるかどうかを確認する」を定義する必要があります。数字を抽出するためにいくつかのモジュロ演算と除算演算を使用しますが、詳細はあなたに任せます。

私はCや他のプログラミング言語については何も話していないことに注意してください。アルゴリズムを知っている場合にのみ、実装について考え始める必要があります。

(実際には、上記のアルゴリズムとは少し異なるアルゴリズムの可能性があります。この場合、各桁が互いにネストされているため、ループが1つあります。その解決策は受け入れられるかもしれませんが、一般的ではありません)

于 2013-03-05T17:48:44.117 に答える
2
for(i=1;i<=500;i++)
{
   //loop for checking each number i
   int sum=0; // to store the sum of cube of digits
   int n=i; //copy of i
   //The below while loops does the task. It extracts a digit from the number and adds its cube to the sum
   // last digit from the number can be seen by taking its remainder by 10 . For eg 35%10=5
   //once we have used this digit make the number shorter by dividing by 10. For eg 35/10 becomes 3 (because of integer divisions)
   while(n>0)
   {
       int rem=n%10; //extract the last digit
       sum+=cube(rem); //cube function raises a number to its cube
       n/=10;  //remove the digit we had extracted earlier from the number
    }
    if(sum==i) //we got the number we wanted
        printf("%d\n",i);

}
于 2013-03-05T17:50:21.607 に答える