1. 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
#include<stdio.h> int main() { int i,j,k; printf(" "); for(i=1;i<5;i++) { // 以下为三重循环 for(j=1;j<5;j++) { for (k=1;k<5;k++) { // 确保i、j、k三位互不相同 if (i!=k&&i!=j&&j!=k) { printf("%d,%d,%d ",i,j,k); } } } } }
输出结果:
1,2,3 1,2,4 1,3,2 1,3,4 1,4,2 1,4,3 2,1,3 2,1,4 2,3,1 2,3,4 2,4,1 2,4,3 3,1,2 3,1,4 3,2,1 3,2,4 3,4,1 3,4,2 4,1,2 4,1,3 4,2,1 4,2,3 4,3,1 4,3,2
2. 题目:输出9*9口诀。
程序分析:分行与列考虑,共 9 行 9 列,i 控制行,j 控制列。
#include<stdio.h> int main() { int i,j,result; printf(" "); for (i=1;i<10;i++) { for(j=1;j<=i;j++) { result=i*j; printf("%d*%d=%-3d",i,j,result); /*-3d表示左对齐,占3位*/ } printf(" "); /*每一行后换行*/ } }
输出结果:
1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
3. 题目:找出1000以内的所有完数, 所谓完数是指一个数恰好等于它的因子之和(不包括其本身),例如:6 = 1+2+3;6就是一个完数
#include <stdio.h> #define N 500 int main(int argc, const char *argv[]) { int data[N] = {0}; int i = 0, j = 0; int num = 0; int temp = 0; for(num=1;num<=1000;num++) { j = 0; temp = 0; for(i=1;i<num;i++) { if((num%i) == 0) //先找出数的因子数的和 { temp += i; } } if(temp == i)//因子和与这个数是否相等 { printf("%d ",num); } } return 0; }
输出结果:6 28 496