theme: nico 8.28.2024 Wed
回顾
鸽鸽说过,回头看的力量是强大的,每次都会有不一样的收获。
看世界,也在寻找自己。 加油!
【经典】 自幂数
- 一位自幂数 独身数
- 三位自幂数 水仙花数
- 四位自幂数 四叶玫瑰树
- ...
水仙花数**(Narcissistic number**)也被称为超完全数字不变数(Pluperfect Digital Invariant, PPDI)、自恋数**、自幂数**或阿姆斯壮数**(Armstrong number),是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于这个数本身。 百度AI解释道
【daffodil】水仙花数
指的是 某三位数的各位数字的三次方之和仍等于该数。则称为水仙花数。 EG:153=1³+5³+3³.
【problem】问题:“输出所有的水仙花数”
【分析】
- 前提条件:水仙花数的定义(某三位数的各位数字的三次方之和仍等于该数)
- 根据定义划定数据范围(100-1000),即(100,1000)【开区间】;
- 还需要得知各位的数字是多少,通过除法与求余数(模运算)求出;
- 各位数字还需要三次方:
- 暴力计算: aaa
- 使用库函数:pow(x,y) ** 需要用到库函数,要引入对应的库函数名称<math.h> **
- ...
- 求得的结果相加求和。
- 最后和该数num进行比对。若相等,则打印出。
【解题步骤】
- 写出基础逻辑框架.
#include <stdio.h>
#include <math.h>
// 声明函数
void daffodil();
int main(){
// daffodil
daffodil();
return 0;
}
void daffodil(){
}
- 确定范围
#include <stdio.h>
#include <math.h>
// 声明函数
void daffodil();
int main(){
// daffodil
daffodil();
return 0;
}
void daffodil(){
for(int i = 100; i < 1000; i++ ){
}
}
- 求出各位数字
#include <stdio.h>
#include <math.h>
// 声明函数
void daffodil();
int main(){
// daffodil
daffodil();
return 0;
}
void daffodil(){
// 各位数字
int a,b,c,sum=0;
for(int i = 100; i < 1000; i++ ){
a = i / 100;
b = i / 10 % 10;
c = i % 10;
// 并求和
sum = pow(a,3) + pow(b,3) + pow(c,3);
}
}
- 判断是否符合条件
#include <stdio.h>
#include <math.h>
// 声明函数
void daffodil();
int main(){
// daffodil
daffodil();
return 0;
}
void daffodil(){
// 各位数字
int a,b,c,sum=0;
for(int i = 100; i < 1000; i++ ){
a = i / 100;
b = i / 10 % 10;
c = i % 10;
// 并求和
sum = pow(a,3) + pow(b,3) + pow(c,3);
if( i == sum ) {
printf("i=%d \n",i);
}
}
}
完整思路
#include <stdio.h>
#include <math.h>
// 声明函数
void daffodil();
int main(){
// daffodil
daffodil();
return 0;
}
void daffodil(){
// 各位数字
int a,b,c,sum=0;
printf("daffodil numbers are ");
for(int i = 100; i < 1000; i++ ){
a = i / 100;
b = i / 10 % 10;
c = i % 10;
// 并求和
sum = pow(a,3) + pow(b,3) + pow(c,3);
if( i == sum ) {
printf("i=%d ",i);
}
}
printf("\n");
}
改进(微动) 不太必要
#include <stdio.h> #include <math.h> // 声明函数 void daffodil(); int main(){ // daffodil daffodil(); return 0; } void daffodil(){ // 各位数字 // int a,b,c,sum=0; int arr[3]={0},sum=0; for(int i = 100; i < 1000; i++ ){ int j=0; arr[j] = i / 100; arr[j + 1] = i / 10 % 10; arr[j + 2] = i % 10; // 并求和 sum = pow(arr[j],3) + pow(arr[j + 1],3) + pow(arr[j + 2],3); if( i == sum ) { printf("i=%d \n",i); } } }
结果
daffodil numbers are 153 370 371 407
【经典 | 找规律 | 图案】打印菱形
打印如下图所示的菱形
【analysis】分析
思路: 仔细观察图形,可以发现,此图形中是由空格和*按照不同个数的输出组成的。
上三角:先输出空格,后输出 * ,每行中 空格:从上往下,一行减少1个; (*)看出规律,得出公式
2 * i + 1下三角: 先输出空格,后输出*,每行中 空格:从上往下,每行多1个空格 * : 从上往下,按照2*(line-1-i)-1的方式减少,其中:line表示总共有多少行 按照上述方式,将上三角和下三角中的空格和*分别输出即可。
思路
#include <stdio.h>
int main() {
return 0;
}
void diamondPatter(){
int n = 7;
// 上三角
for(int i = 0; i < n; i++ ){
for(int j=0;j<n-i-1;j++){
printf(" ");
}
for(int k=0;k<2*i+1;k++){
printf("*");
}
}
// 下三角
for(int i = 0; i < n-2; i++ ){
for(int j=0;j<n-i-1;j++){
printf(" ");
}
for(int k=0;k<2*i+1;k++){
printf("*");
}
}
}
【经典 | 找规律】喝汽水问题
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)。
【analysis】分析
- 1瓶汽水1元
- 2个空瓶可以换一瓶汽水
以下思路是基于有多少钱只能全部购买汽水,之后再根据空瓶数推算
- 设
- 钱数 money
- 汽水总数 total
- 空瓶数 empty
- 1瓶汽水1元,有多少钱就能买多少汽水
- total = money
- 有多少瓶汽水,就有多少个空瓶
- empty = total
以上是初始值
- 两个空瓶可换一瓶汽水--- total empty
- total += empty/2
- empty = empty/2 + empty%2
- 此时是要判断空瓶数量empty是否大于1?
- 若empty > 1,则需要执行第六步
- 反之则得出最终的total
【代码】实现
#include <stdio.h>
// 声明
int sodaWater(int money);
int main() {
int money = 0;
printf("please input/enter the amount of money: ");
scanf("%d",&money);
int total = int sodaWater(int money);
printf("the number of the soda water is %d \n",total);
return 0;
}
int sodaWater(int money){
int total = money,empty=money;
while(empty>1){
total += empty/2;
empty = empty/2 + empty%2;
}
return total;
}
【分析 | 方法/思路Ⅱ】找规律
经过分析,我们知道三块钱可以买到 五瓶汽水。 如下图所示:
进而我们推出四块五块..
五块钱 --- 9瓶
...
当钱为10元时,可以喝19瓶汽水
总结以上规律,得出
total = 2*money-1
【代码】实现
#include <stdio.h>
// 声明
int sodaWater(int money);
int main() {
int money = 0;
printf("please input/enter the amount of money: ");
scanf("%d",&money);
int total = int sodaWater(int money);
printf("the number of the soda water is %d \n",total);
return 0;
}
int sodaWater(int money){
if(money=0){
return 0;
}
//int total = 2*money-1;
return 2*money-1;
}