C语言程序设计100例之(4):水仙花数
例4 水仙花数
题目描述
一个三位整数(100~999),若各位数的立方和等于该数自身,则称其为“水仙花数”(如:153=13+53+33),找出所有的这种数。
输入格式
没有输入
输出格式
若干行,每行1个数字。
输入样例
无
输出样例
153
* * *
...
* * *
(输出被和谐了)
(1)编程思路1。
对三位数n(n为100~999之间的整数)进行穷举。对每个枚举的n,分解出其百位a(a=n/100)、十位b(b=n/10%10)和个位c( c=n%10),若满足a*a*a+b*b*b+c*c*c== n,则n是水仙花数。
(2)源程序1。
#include <stdio.h>
int main()
{
int n, a, b, c; //n、a、b和c分别为三位数自身及其百位、十位和个位
for(n=100 ;n<=999;n++)
{
a=n/100;
b=n/10%10;
c=n%10;
if(a*a*a+b*b*b+c*c*c== n)
printf("%d\n",n);
}
return 0;
}
(3)编程思路2。
用一个三重循环对一个3位数的百位a(a的范围为1~9)、十位b(b的范围为0~9)和个位c(c的范围为0~9)进行穷举,在循环体中,计算出3位数n(n=100*a+10*b+c),然后进行判断,若满足a*a*a+b*b*b+c*c*c== n,则n是水仙花数。
(4)源程序2。
#include <iostream>
using namespace std;
int main()
{
int n, a, b, c; //n、a、b和c分别为三位数自身及其百位、十位和个位
for(a=1 ;a<=9;a++)
for (b=0; b<=9;b++)
for(c=0;c<=9;c++)
{
n=100*a+10*b+c;
if(a*a*a+b*b*b+c*c*c== n)
printf("%d\n",n);
}
return 0;
}
习题4
4-1 子数整数
本题选自洛谷题库 (https://www.luogu.org/problem/P1151)
题目描述
对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:
sub1=a1a2a3
sub2=a2a3a4
sub3=a3a4a5
例如,五位数20207可以拆分成
sub1=202
sub2=020(=20)
sub3=207
现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1 ,sub2 ,sub3都可被K整除。
输入格式
一个正整数K
输出格式
每一行为一个满足条件的五位数,要求从小到大输出。不得重复输出或遗漏。如果无解,则输出“No”。
输入样例
15
输出样例
22555
25555
28555
30000
(1)编程思路。
本题关键是分离出一个五位数n的三个子数sub1 ,sub2 和sub3。由于sub1是n的高3位数,因此,sub1=n/100;sub2是n的中间3位数,因此,sub2=n/10%1000;sub3是n的低3位数,因此,sub3=n%1000。
用循环for (n=10000;n<=30000;n++)对每个五位数n进行穷举判断即可。
(2)源程序。
#include <stdio.h>
int main()
{
int i,sub1,sub2,sub3,k,f=0;
scanf("%d",&k);
for (i=10000;i<=30000;i++)
{
sub1=i/100;
sub2=i/10%1000;
sub3=i%1000;
if (sub1%k==0 && sub2%k==0 && sub3%k==0)
{
printf("%d\n",i);
f=1;
}
}
if (f==0) printf("No\n");
return 0;
}
4-2 4位分段和平方数
题目描述
一个4位自然数分为前后两个2位数,若该数等于所分两个2位数和的平方,则称为4位分段和平方数。例如,2025=(20+25)2。
编写程序求出所有4位分段和平方数。
输入格式
没有输入
输出格式
若干行,每行1个数字。
输入样例
无
输出样例
2025
* * *
...
* * *
(输出被和谐了)
(1)编程思路1。
对所有的4位整数n进行穷举,n的范围为1000~9999,共9000个数。对每个数n,分离出高两位数x(x=n/100)和低两位数y(y=n%100),然后进行判断,若满足n==(x+y)*(x+y),则n是一个4位分段和平方数。
(2)源程序1。
#include <stdio.h>
int main()
{
int n,x,y;
for(n=1000;n<=9999;n++)
{
x=n/100;
y=n%100;
if (n==(x+y)*(x+y))
printf("%d\n",n);
}
return 0;
}
(3)编程思路2。
思路1的穷举次数为9000次。实际上,由于4位分段和平方数一定首先是一个平方数,因此只需要穷举4位数中的平方数即可,即穷举sqrt(1000)~sqrt(9999)之间的数a,在循环体中,先计算出4位数n=a*a,再分离出高两位数x(x=n/100)和低两位数y(y=n%100),然后进行判断,若满足a==(x+y),则n是一个4位分段和平方数。显然,这样穷举,循环次数会大为减少。
(4)源程序2。
#include <stdio.h>
#include <math.h>
int main()
{
int a,n,x,y;
for(a=(int)sqrt(1000);a<=(int)sqrt(9999);a++)
{
n=a*a;
x=n/100;
y=n%100;
if (a==x+y)
printf("%d\n",n);
}
return 0;
}
4-3 特定的四位数
题目描述
有这样一些特定的四位数,它的千位数字与十位数字之和等于百位数字与个位数字之积。例如,3136, 3+3=1*6 ,故3136就是一个特定的四位数。
输入格式
一个正整数K(1111<=K<=9999)
输出格式
一个不大于K的最大的特定四位数。
输入样例
8000
输出样例
7921
(1)编程思路。
从k开始对四位数i进行穷举,对每个四位数i分离出千位a(a=i/1000)、百位b(b=(i-a*1000)/100)、十位c(c=(i-a*1000-b*100)/10)和个位d(d=i%10)。
(2)源程序。
#include<stdio.h>
int main()
{
int i,k,a,b,c,d;
scanf("%d",&k);
for (i=k; i>=1000; i--)
{
a=i/1000 ;
b=(i-a*1000)/100;
c=(i-a*1000-b*100)/10;
d=i%10;
if (a+c==b*d)
{
printf("%d\n",i);
break;
}
}
return 0;
}
C语言程序设计100例之(4):水仙花数的更多相关文章
- 黑马程序员——经典C语言程序设计100例
		1.数字排列 2.奖金分配问题 3.已知条件求解整数 4.输入日期判断第几天 5.输入整数进行排序 6.用*号显示字母C的图案 7.显示特殊图案 8.打印九九口诀 9.输出国际象棋棋盘 10.打印楼梯 ... 
- C语言程序设计100例之(22):插入排序
		例22 插入排序 问题描述 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素或记录的任意序列,重新排列成一个以关键字递增(或递减)排列的有序序列. 排序的方法有很多,简单插入排序就是一 ... 
- C语言程序设计100例之(9):生理周期
		例9 生理周期 问题描述 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为 23 天.28 天和33 天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如 ... 
- C语言程序设计100例之(6):数字反转
		例6 数字反转 题目描述 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2). 输入格式 ... 
- C语言程序设计100例之(14):丑数
		例14 丑数 问题描述 丑数是其质因子只可能是2,3或5的数.前10个丑数分别为1, 2, 3, 4, 5, 6, 8, 9, 10, 12.输入一个正整数n,求第n个丑数. 输入格式 每行为一个 ... 
- C语言程序设计100例之(17):百灯判亮
		例17 百灯判亮 问题描述 有序号为1.2.3.….99.100的100盏灯从左至右排成一横行,且每盏灯各由一个拉线开关控制着,最初它们全呈关闭状态.有100个小朋友,第1位走过来把凡是序号为1的 ... 
- C语言程序设计100例之(25):确定进制
		例25 确定进制 问题描述 6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的.即 6(13)* 9(13)= 42(13),因为,在十三进制中,42 = 4 * 13 + ... 
- C语言程序设计100例之(11):求质数
		例11 求质数 问题描述 质数是指除了有1和自身作为约数外,不再有其他约数的数.比如:3.5.7是质数.而9不是质数,因为它还有约数3. 编写程序求给定区间中的所有质数. 输入格式 两个整数a和b, ... 
- C语言程序设计100例之(23):数列求和
		例23 数列求和 问题描述 已知某数列前两项为2和3,其后继项根据前面最后两项的乘积,按下列规则生成: ① 若乘积为一位数,则该乘积即为数列的后继项: ② 若乘积为二位数,则该乘积的十位上的数字和个 ... 
随机推荐
- github项目上传管理
			一.完成项目后再在github上面新建仓库然后上传代码文件 1.创建仓库时不初始化README.md文件 touch README.md //此行可忽略 git init //初始化仓库 git ad ... 
- 用java求整数和
			public class JavaAppArguments { /** * @param args */ public static void main(Str ... 
- 由一次线上故障来理解下 TCP 三握、四挥 & Java 堆栈分析到源码的探秘
			本文导读: 生产故障场景介绍 TCP 建连三次握手过程 TCP 断连四次挥手过程 结合 Java 堆栈剖析源码 再从堆栈中找到"罪魁祸首" 问题优化方案总结 1.生产故障场景介绍 ... 
- (19)ASP.NET Core EF创建模型(包含属性和排除属性、主键、生成的值)
			1.什么是Fluent API? EF中内嵌的约定将POCO类映射到表.但是,有时您无法或不想遵守这些约定,需要将实体映射到约定指示外的其他对象,所以Fluent API和注解都是一种方法,这两种方法 ... 
- Cocos2d-x 学习笔记(3.3) Layer
			1.简介 Layer直接继承了Node.Layer类似Ps里图层的概念,也可以理解成一块透明玻璃.Scene类似Ps里的一张图像,也可以理解成堆放玻璃的箱子. Layer能接收触摸事件.键盘事件.加速 ... 
- 算法---ALGO-3 Java K好数 蓝桥杯
			package Main; import java.io.InputStream; import java.util.Scanner; public class Main { public stati ... 
- django报错问题解决
			注意以下修改文件均是修改虚拟python环境中的文件 1.执行(venv) E:\myproj\autotest>python manage.py makemigrations报错: 解决办法: ... 
- Linux面试题-7
			在日常管理中,通常CPU会影响系统性能的情况是: A A:CPU已满负荷地运转 B:CPU的运行效率为30% C:CPU的运行效率为50% D:CPU的运行效率为80% 下面那个命令可以终止一个用户的 ... 
- kubernetes kubelet组件中cgroup的层层"戒备"
			cgroup是linux内核中用于实现资源使用限制和统计的模块,docker的风靡一时少不了cgroup等特性的支持.kubernetes作为容器编排引擎,除了借助docker进行容器进程的资源管理外 ... 
- 百万年薪python之路  --   递归
			递归(每当有一个函数被递归调用,就应该要有一个返回值,才能正常把递归的返回值'归'回来) 一个正经的递归:  1.不断调用自己本身  2.有明确的结束条件 递归注重于"一递 一归&quo ... 
