for循环
// 《第 03 讲:循环结构》
// 1. (*)有 10 亿元钱每天花一半,可以花多少天
int day = 0;
int dollar = 1000000000;
while (dollar > 0) {
dollar = dollar / 2;
day++;
}
printf("day = %d" , day);
// 2. (**)随机产生 20 个[10 , 100]的正整数,输出这些数以及他们中的最大数
int num = 0;
int max = 0;
int index = 0;
for (int i = 0; i < 20; i++) {
num = (arc4random() % 91 + 10);
printf("%d " , num);
if (index == 0) {
max = num;
} else {
if (max < num) {
max = num;
}
}
index++;
}
printf("\nmax = %d" , max);
// 3. (**)编程将所有“水仙花数”打印出来,并打印其总个数。“水仙花数”是一个各个位立方之和等于该整数的三位数。
//水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)
// n = 3;
int num = 0;
int a = 0;
int b = 0;
int c = 0;
for (num = 100; num <= 999; num++) {
c = num/100;
b = num/10%10;
a = num%10;
if (a*a*a + b*b*b + c*c*c == num) {
printf("%d " , num);
}
}
// n = 4
int num = 0;
int a = 0;
int b = 0;
int c = 0;
int d = 0;
for (num = 1000; num <= 9999; num++) {
d = num/1000;
c = num/100%10;
b = num/10%10;
a = num%10;
if (a*a*a*a + b*b*b*b + c*c*c*c + d*d*d*d == num) {
printf("%d " , num);
}
}
// 4.(**)已知 abc+cba = 1333,其中 a,b,c 均为一位数,编程求出满足条件的 a,b,c 所有组合
for (int a = 0; a <= 9; a++) {
for (int b = 0; b <= 9; b++) {
for (int c = 0; c <= 9; c ++) {
if ((a * 100 + b * 10 + c) + (c * 100 + b * 10 + a) == 1333) {
printf("a = %d , b = %d , c = %d" , a , b , c);
printf("\n");
}
}
}
}
int m = 40 , n = 60;
int a = m , b = n;
while (n % m != 0) {
int temp = n % m;
n = m;
m = temp;
}
printf("%d , %d\n" , m , a * b /m);
// 5. (***)输入两个数,求最大公约数和最小公倍数。(用两种方法:辗转相 除法和普通方法)
// 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数.
//
// 求最小公倍数算法:
//
// 最小公倍数=两整数的乘积÷最大公约数
//
// 求最大公约数算法:
//
// (1)辗转相除法
//
// 有两整数a和b:
//
// ① a%b得余数c
//
// ② 若c=0,则b即为两数的最大公约数
//
// ③ 若c≠0,则a=b,b=c,再回去执行①
//
// 例如求27和15的最大公约数过程为:
//
// 27÷15 余1215÷12余312÷3余0因此,3即为最大公约数
int a , b , c , m , n;
printf("输入");
scanf("%d %d" , &a , &b);
m = a;
n = b;
while (b != 0) {
c = a % b;
a = b;
b = c;
}
printf("最大公约数: %d" , a);
printf("最小公倍数: %d" , m * n / a);
// ⑵ 相减法
//
// 有两整数a和b:
//
// ① 若a>b,则a=a-b
//
// ② 若a<b,则b=b-a
//
// ③ 若a=b,则a(或b)即为两数的最大公约数
//
// ④ 若a≠b,则再回去执行①
//
// 例如求27和15的最大公约数过程为:
//
// 27-15=12( 15>12 ) 15-12=3( 12>3 )
//
// 12-3=9( 9>3 ) 9-3=6( 6>3 )
//
// 6-3=3( 3==3 )
//
// 因此,3即为最大公约数
int a = 0 , b = 0 , m = 0 , n = 0;
printf("输入两个数:");
scanf("%d%d" , &a ,&b);
m = a;
n = b;
while (a != b) {
if (a > b) {
a = a - b;
} else {
b = b - a;
}
}
printf("最大公约数:%d" , b);
printf("\n最小公倍数:%d" , m * n / b);
//普通法 先求最大公约数
int a = 40 , b = 60;
int max = a > b ? a : b;
int min = a + b - max;
int i = 1;
int commonDivisior = 0;
while (i <= min) {
if ((max % i == 0) && (min % i == 0)) {
commonDivisior = i;
}
i++;
}
printf("最大公约数:%d\n" , commonDivisior);
//普通法 先求最小公倍数
int a = 12 , b = 27;
int min = 1 , num = 0;
while (min >= 1) {
if ((min % a == 0) && (min % b == 0)) {
num = min;
break;
}
min++;
}
printf("最大公约数为:%d" , num);
// 6. 求 n 个随机数里的最小值(如何表示产生随机数的第一个数?)
// int n = 0;
// int num = 0;
// int min = 0;
// //int min = 2147483647; //int最大值printf("%d\n", ~(unsigned int)0 / 2);
// int index = 0;
// printf("输入n = ");
// scanf("%d" , &n);
//
// for (int i = 1; i <= n; i++) {
// num = arc4random();
// printf("%d " , num);
// if (index == 1) {
// min = num;
// } else {
// if (min > num) {
// min = num;
// }
// }
// index++;
// }
//
// printf("\nmin = %d" , min);
//