C語言程式設計課堂總結5
這個系列是用來解決學校C語言課程的,並不適用於ACM和OI
本系列部落格分為2部分,分別是 C語言程式設計筆記(網課) 和 課堂總結(線下課)
歡迎轉載ssw02的部落格: https://www.cnblogs.com/ssw02/p/15994555.html
C語言程式設計課堂總結5-1
C語言程式設計筆記上關於迴圈我寫的比較多了,這裡直接貼幾張基礎的PPT來回顧一些迴圈的知識,並且開始打題為主
C語言程式設計課堂總結5-2
打題!!!打題!!! 友情提示,為了避免某些人ctrl+c/v,我刻意使用C++語法寫的,有的地方還會刻意改動,提交是會RE的哦
Description1
輸出所有的“水仙花”數。“水仙花”數是一個三位數,它的每一位立方的和與自身相等。如:153=13+33+53,153是一個“水仙花”數
Input1
無
Output1
從大到小依次輸出每一個水仙花數,以空格為間隔
Analysed1
這題有兩種基礎的做法,第一種是列舉所有三位數字,並且進行拆分,驗證是否是水仙花數字
第二種做法是列舉每一位數字去組成水仙花數並且驗證,都很直接了當
ACcode1
#include<bits/stdc++.h> using namespace std ; int main(){ for( register int i=100 ; i<=999 ; ++i ){ int FNum = i/100 , SNum = i/10%10 , TNum = i%10 ; if( FNum*FNum*FNum + SNum*SNum*SNum + TNum*TNum*TNum == i )printf("%d ",i); } return 0 ; }
ACcode2
#include<bits/stdc++.h> using namespace std ; int main(){ for( register int i=1 ; i<=9 ; ++i )//注意百位不能是0 for( register int j=0 ; j<=9; ++j ) for( register int k=0 ; k <=9 ; ++k) if( 100*i + 10*j + k == i*i*i + j*j*j + k*k*k) printf("%d ",100*i + 10*j + k); return 0; }
Description2
完數是指一個整數恰好等於它的因子之和(除自身外),則稱這個數為完數。從鍵盤先後輸入兩個不大於9999的正整數m和n,若m>n,則交換兩數。然後求m~n(m和n均為正整數且m≤n)之間的所有完數。
Input2
1 2000
Output2
6
28
496
Analysed2
資料範圍這麼小,N^2演算法即可
強行列舉範圍內每個數的因數相加即可
ACcode2
#include<bits/stdc++.h>
using namespace std;
int m , n ;
int main(){
cin>>m>>n ;
if( m>n )swap(m,n) ;
for( register int i = m ; i <= n ; ++i ){
int Sum = 0 ;
for( register int j = 1 ; j <= i/2 ; ++j )
if( !(i%j) )Sum += j ;
if( Sum == i )printf("%d\n",i) ;
}
return 0 ;
}
Description2
完數是指一個整數恰好等於它的因子之和(除自身外),則稱這個數為完數。從鍵盤先後輸入兩個不大於9999的正整數m和n,若m>n,則交換兩數。然後求m~n(m和n均為正整數且m≤n)之間的所有完數。
Input2
1 2000
Output2
6
28
496
Analysed2
資料範圍這麼小,N^2演算法即可
強行列舉範圍內每個數的因數相加即可
ACcode2
#include<bits/stdc++.h>
using namespace std;
int m , n ;
int main(){
cin>>m>>n ;
if( m>n )swap(m,n) ;
for( register int i = m ; i <= n ; ++i ){
int Sum = 0 ;
for( register int j = 1 ; j <= i/2 ; ++j )
if( !(i%j) )Sum += j ;
if( Sum == i )printf("%d\n",i) ;
}
return 0 ;
}