廈理OJ 1008 3 7紅玫瑰數

2021-08-31 06:47:40 字數 1831 閱讀 7947

應大家要求,先來寫寫這題的解析(滑稽)

description

若正整數n的所有因子之和等於n的倍數,則稱n為紅玫瑰數,如28的因子之和為1+2+4+7+14+28=56=28*2,故28是紅玫瑰數,求: 

(1)[1,700]之間最大的紅玫瑰數。 

(2)[1,700]之間有多少個紅玫瑰數。 

input

output

第一行輸出乙個整數,代表[1,700]之間最大的紅玫瑰數。 

第二行輸出乙個整數,代表[1,700]之間有多少個紅玫瑰數。 

第三行從小到大輸出[1,700]之間的所有紅玫瑰數,每兩個數之間用空格隔開。

sample input

sample output

672

61,,,,

本題的思路就是一次迴圈判斷1到700之間的每乙個數是否為紅玫瑰數,並用相應變數儲存紅玫瑰數個數、最大紅玫瑰數以及所有的紅玫瑰數,於是可以得到如下**。(注:is_rosenum()為函式,功能是判斷乙個數字是否為紅玫瑰數,具體實現在下面講)

int total = 0, rose_max = 0;    //用於儲存總數和最大紅玫瑰數

int rose[700]; //用於儲存所有紅玫瑰數

for (int i = 1; i <= 700; i++) //1到700迴圈判斷是否為紅玫瑰數

}

有了這個大體框架後接下來就是要完成其中的一些模組,如is_rosenum()函式(可以算是這題核心吧qaq),根據題目對紅玫瑰數的定義我們可以對該函式進行編寫。因數(不懂定義的小盆友,度娘了解一下)的判斷只需要判斷乙個數能否被乙個數整除,即n%i==0(i為需要判斷是否為n的因數的乙個數),倍數就不用多說了,取模(%)**好!!!

//判斷是否為紅玫瑰數

bool is_rosenum(int n)

} if (!(sum%n)) //根據定義,判斷因數和是否為n的整數倍

return true; //若是,則返回真

return false; //若不是,則返回假

}

關於函式:若還沒學到函式,可以將函式內容放進main()函式內,不過這樣main()函式看起來冗長,可讀性下降

最後我們只要對函式輸出部分進行新增即可,下面放出ac原始碼

#include using namespace std;

/************以上為c++頭部,c語言自行包含相關標頭檔案************/

bool is_rosenum(int i);//函式不要忘記宣告

int main()

} //c++輸出,c語言使用pringf() 形式不變

cout << rose_max << endl;

cout << total << endl;

for (int i = 0; i < total; i++)

cout << rose[i] << " ";

return 0;

}//判斷是否為紅玫瑰數

bool is_rosenum(int n)

} if (!(sum%n))

else

return false;

}

依舊沒想好(鬼知道哪天會不會想乙個藍玫瑰數出來,滑稽)

廈理OJ 1004 3 6搬磚問題

之前事情有點多,託更了,抱歉qaq description 某工地需要搬運磚塊,已知男人一人搬3塊,女人一人搬2塊,小孩兩人搬1塊,有多少種搬法用45人正好搬45塊磚?input無 output men women child sample input 無sample output men 0 wo...

廈理OJ 1005 3 3統計不同型別字元

description 輸入一行字元,分別統計其中英文本母 空格 數字和其它字元的個數。input 鍵盤上的任意字串,以 結束。output character blank digit other sample input case 1 printf very good sample output ...

南理oj 57 6174問題(水)

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 假設你有乙個各位數字互不相同的四位數,把所有的數字從大到小排序後得到a,從小到大後得到b,然後用a b替換原來這個數,並且繼續操作。例如,從1234出發,依次可以得到4321 1234 3087 8730 378 8352 85...