2012-02-19 5 views
1

教授は最初の完全な正方形を印刷し、最後の2桁が奇妙であるプログラムを作成するよう依頼しました。以下は私がこの問題を試してみたものですが、それを動作させるにはさまざまな方法を試しましたが、役に立たないものです。私は周りを検索し、同様の割り当てを持つ他の誰かを見つけることができないようです。これに関する助けがあれば大いに感謝します。最後の2桁が奇数である最初の完全な正方形が印刷されない理由を理解できません

// Project3.cpp : main project file. 

#include "stdafx.h" 
#include <iostream> 
#include <cmath> 
using namespace std; 

int main() { 

    cout << "This program will attempt to find the first perfect square with the last two digits of the square being odd...\n"; 

    int i = 10;   //1. initialize "i" to 10 since square of 1 to 9 are already known to not have 2 odd last digits. 
    int a = i*i;  //2. initialize "a" equal to the square of "i". 
    int b = a % 100; //3. initialize "b" to be the remainder of "a" divided by 100 (modulus operator). 
    int c = b/10;  //4. initialize "c" to be b divided by 10, which gives us the "tens" place. 
    int d = a % 10;  //5. initialize "d" to be the remainder of "a" divided by 10, giving us the "ones" place. 

    while (((b>10) && (b%2 != 0) && (c%2 != 0) && (d%2 != 0) && ((i*i)%i ==0)) != true){ 
     if ((b>10) && (b%2 != 0) && (c%2 != 0) && (d%2 != 0) && ((i*i)%i ==0)) { 
     cout << "The first perfect square whose last two digits are odd is " << a << ".\n"; 
     system("PAUSE"); 
     return 0; 
     } 
     else { 
     ++i;} 
    }  
    system("PAUSE"); 
    return 0; 
} 

おかげで、あなたのコードは一度だけ実行されている デイブ

+0

すべての行にコメントするための+1 – milancurcic

答えて

1

。ループが必要です。

は考えてみましょう:

  • あなたの初期化コードを実行します。
  • 出力を表示して終了するか、またはiをインクリメントするif/elseを実行します。
  • その後、mainの最後に到達し、プログラムが終了します。

ここで、「この新しい値のiでもう一度お試しください」とは言いません。そこにforまたはwhileが必要です。

+0

あなたのお返事ありがとうございます。 ifの前にwhileループを置こうとしましたが、うまくいきませんでした。 – dave5678

+0

コードをもう一度見てください。あなたのコメントを読んでください。 「私」の価値に依存するものはありますか? 'i'が変更されたときにそれらを更新していますか? –

+0

私は変数を0に設定してグローバル変数として宣言してから、whileループのステートメントをiインクリメンタとして設定しました。これまでは変数宣言(int a = i * i)として持っていました。これは正しい方向ですか? – dave5678

0

次のプログラムは下二桁(ベース10)が奇数である全て完全正方形プリントアウト:N の最後の数字が奇数である場合、n自体である必要があり、

int main(void){ 
    return 0; 
} 

を奇数、n = 2*k + 1の一部はkです。次に

n^2 = (2*k + 1)^2 = 4*k*(k+1) + 1 

の形式は4*m + 1です。しかし、10 = 2*4 + 2なので、最後から二番目の桁が奇数の場合は、2の剰余を返します。4*m + 1という形式の番号を取得するには、最後の桁の形式が4*s + 3でなければなりません。したがって、最後の2桁(基数10)が奇数である完璧な正方形がありません。

あなたの教授は、の最初のの2桁が奇妙な最初の完全な正方形を尋ねたのでしょうか?

+0

お返事ありがとうございます。あなたが言った数式は完全な正方形に特有ですか?私の教授については、これは彼が投稿したリンクです:[link](http://venus.cs.qc.edu/~waxman/211/Perfect%20square%20problem.pdf) – dave5678

+0

どちらの式ですか? (a + b)^ 2 = a^2 + 2 * a * bb^2の特別な場合は、(2 * k + 1)^ 2 = 4 * k *(k + 1) (2 * k)^ 2 + 2 *(2 * k)* 1 = 4 * k^2 + 4 * k = 4 * k *(k + 1) ')である。これは、すべての完全な正方形が4で割ったときに残りの0または1を持つことを確認する方法です。リンクに関しては、タスクは明らかに解決策がない。ちょっとした疑問や単なる間違いだったのかどうかは分かりません。 –

関連する問題