第一天:基础编程思维入门(程序 1-5)
程序 1:三位数排列组合问题
题目 :用 1、2、3、4 组成无重复数字的三位数,求所有可能的组合。
核心思路:三重循环遍历百位、十位、个位,通过条件判断过滤重复数字。
cpp
main() {
int i,j,k;
for(i=1;i<5;i++)
for(j=1;j<5;j++)
for(k=1;k<5;k++)
if(i!=k&&i!=j&&j!=k)
printf("%d,%d,%d\n",i,j,k);
}
关键点 :三重循环的嵌套逻辑,条件判断的去重逻辑。
扩展思考:若数字改为 0-9,如何修改代码?(提示:百位不能为 0)
程序 2:完全平方数求解
题目 :寻找一个数,加 100 是完全平方数,再加 168 也是完全平方数。
核心思路:遍历 10 万以内的数,用平方根函数判断是否为整数。
cpp
#include "math.h"
main() {
long int i,x,y;
for(i=1;i<100000;i++) {
x=sqrt(i+100);
y=sqrt(i+268);
if(x*x==i+100&&y*y==i+268)
printf("%ld\n",i);
}
}
关键点 :利用数学库函数sqrt
,通过平方验证完全平方数。
优化点 :可缩小循环范围,比如从 1 开始到(y^2 - 268)
,减少计算量。
程序 3:三数排序
题目 :输入三个数,按从小到大输出。
核心思路:两两比较交换,确保最小数在最前。
cpp
main() {
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if(x>y) {t=x;x=y;y=t;}
if(x>z) {t=z;z=x;x=t;}
if(y>z) {t=y;y=z;z=t;}
printf("small to big: %d %d %d\n",x,y