这个系列是用来解决学校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 ;
}