# 题目
有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
# 分析
定义三个变量分别代表个位、十位、百位,用三层 for 循环判断个位不等于十位和百位,十位不等于百位,最后把结果输出
# 代码实现
#include <stdio.h> | |
int main(int argc, char argv[]) | |
{ | |
int units,tens,hundreds; | |
for(units=1;units<5;units++) | |
for(tens=1;tens<5;tens++) | |
for(hundreds=1;hundreds<5;hundreds++) | |
if( units!=tens && units!=hundreds && tens!=hundreds ) | |
printf("%d%d%d\n",units,tens,hundreds); | |
return 0; | |
} |
# 扩展练习
写一个可以生成 6 位互不相同的密码生成器,密码字符包含数字、大小写字母和特殊字符
# 分析
通过查看 ASCII 编码表可以发现十进制 48 到 57 为数字 0 ~ 9,65 到 90 为大写字母 A ~ Z,97 到 122 为小写字母 a ~ z,33 到 47、58 到 64、91 到 96,123 到 126 都为特殊字符,直接采用类型转换方式,将十进制 33 ~ 126 强制转换成 char 类型输出对应的字符
我写的代码比较简单,六层 for 循环自己跑了一下感觉速度很慢,不知道有没有什么办法可以优化,我这边代码结果直接输出到屏幕,如果需要写入文件需要自己对代码修改一下
# 代码
#include <stdio.h> | |
int main(int argc, char argv[]) | |
{ | |
int a,b,c,d,e,f; | |
for(a=33;a<127;a++) | |
for(b=33;b<127;b++) | |
for(c=33;c<127;c++) | |
for(d=33;d<127;d++) | |
for(e=33;e<127;e++) | |
for(f=33;f<127;f++) | |
printf("%c%c%c%c%c%c\n",(char) a,(char) b,(char) c,(char) d,(char) e,(char) f ); | |
return 0; | |
} |