1. 程式人生 > 其它 >C語言程式設計課堂總結5

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 ; 
}