//1 2 3 4组成多少个互不相同且无重复数字的三位数
int main() {
int num = 0; //数量
int i,j,k;
for (i = 1; i <= 4; ++i) {
for (j = 1; j <= 4; ++j) {
for (k = 1; k <= 4; ++k) {
if (k != i && k != j&&i!=j) {
printf("%d%d%d\n", i,j,k);
++num;
}
}
}
}
printf("总共有%d种\n", num);
}
int main() {
int i,x,y;
for (i = 0; i < 100000; ++i) {
x = sqrt(i + 100);
y = sqrt(i + 268);
if (x*x == i + 100 && y*y == i + 268) {
printf("%d\n", i);
return;
}
}
}
int main() {
int x, y, z;//最后排序后的大小位 x代表最小值 y位中值 z代表最大值
scanf("%d%d%d", &x, &y, &z);
int t;
//先选一个最小的出来
if (x > y) { //交换x y
t = x;
x = y;
y = t;
}
if (x > z) { //交换x z
t = x;
x = z;
z = t;
}
//剩下两个再选
if (y > z) { //交换y z
t = y;
y = z;
z = y;
}
printf("顺序 %d %d %d", x, y, z);
}
斐波那契数列
F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
int main() {
int f1 = 1, f2 = 1;
int f;
for (int i = 3; i < 20; ++i) { //月份
f = f1 + f2;
printf("%d兔子数为%d\n", i, f);
f1 = f2;
f2 = f;
}
}
int main() {
int num = 0;
int prime;
for (int i = 101; i <= 200; ++i) {
prime = 1;
for (int j = 2; j <= sqrt(i); ++j) {
if (i%j == 0) {
printf("%d不是素数\n", i);
prime = 0;
break;
}
}
if (prime == 1) {
++num;
}
}
printf("素数有%d个\n", num);
}
int main() {
int i,sum,rem;
int total;
for (i = 100; i < 1000; ++i) {
total = 0;
sum = i;
while (sum) {
rem = sum % 10;
total += pow(rem, 3);
sum /= 10;
}
if (total == i) {
printf("%d\n", i);
}
}
}
int main() {
int i= 5;
int j;
int flag = 1; //有比自己本身小的质因数 变为0
int total = i;
for (j = 2; j <= total / 2;) {
if (i%j == 0) {
flag = 0;
printf("%d", j);
i = i / j;
if (i > 1) {
printf("*");
}
}
else {
++j;
}
}
if (flag) {
printf("%d\n", total);
}
}
int main() {
int a = 2;
int n = 5;
int i,j;
int total = 0, sum = 0;
for (j = 0; j < n; ++j) {
i = 0,total=0;
for (; i <= j; ++i) {
total += a * pow(10, i);
}
sum += total;
}
printf("%d\n", sum);
}
int main() {
int num,i;
int total; //每个数的因子和
for (num = 1; num <= 1000; ++num) {
total = 0;
for (i = 1; i <= num / 2; ++i) {
if (num%i == 0) {
total += i;
}
}
if (total == num) {
printf("%d\n", num);
}
}
}
int main() {
double total;//一共跳了多少
double h = 100; //每次跳的高度
int i;
total = h; //第一次落下
for (i = 2; i <= 10; ++i) {
h /= 2;
total += h*2;
}
printf("total=%.3f 第十次反弹%.3f\n", total,h/2);
}
//第一天摘完以后马上就吃 循环九次算到第一天剩的桃子 再循环一次是第一天摘的桃子数
int main() {
int n=1;//每天剩的桃子
int i;
for (i = 10; i >= 1; --i) {
n = (n + 1) * 2;
}
printf("%d\n", n);
}
int main() {
//将a b c顺序不变 改变x y z的顺序 使之与abc对应
//abc的对手是ijk
int i, j, k;
for (i = 'x'; i <= 'z'; ++i) {
for (j = 'x'; j <= 'z'; ++j) {
if (i != j) {
for (k = 'x'; k <= 'z'; ++k) {
if (k != i && k != j) {
if (i != 'x'&&k != 'x'&&k != 'z') {
printf("a vs %c\nb vs %c\nc vs %c\n", i, j, k);
}
}
}
}
}
}
}
int main() {
float f1 = 2, f2 = 1; //f1分子 f2分母
float total = 0;
float temp;
for (int i = 0; i < 20; ++i) {
total += f1 / f2;
temp = f1;
f1 = f1 + f2;
f2 = temp;
}
printf("%.3f\n", total);
}
int main() {
int total;
int sum = 0;
//for (int i = 1; i <= 20; ++i) {
// total = 1; //单个数的阶乘
// for (int j = 1; j <= i; ++j) {
// total = total * j;
// }
// sum += total;
//}
//改进后 只需要一个循环
total = 1; //阶乘
sum = 0;
for (int i = 1; i <= 20; ++i) {
total = total * i;
sum += total;
}
printf("%d\n", sum);
}
int multi(int n) {
if (n == 1) { //找到最小情况
return 1;
}
else {
return n * multi(n - 1);
}
}
int main() {
printf("%d\n",multi(5));
}
void reverse(int n) {
int num;
if (n == 1) {
scanf("%d", &num);
printf("%d\n",num );
}
else {
scanf("%d", &num);
reverse(n - 1);
printf("%d\n", num);
}
}
int main() {
reverse(5);
}
int age(int n) {
if (n == 1) {
return 10;
}
else {
return age(n - 1) + 2;
}
}
int main() {
printf("%d\n", age(5));
}
任何一个数和0按位异或都等于它本身
int main() {
int i, j;
int a[6][6] = { 0 };
a[0][0] = 1;
for (i = 0; i < 6; ++i) {
a[i][0] = 1;
for (j = 1; j < i; ++j) {
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
}
a[i][j] = 1;
}
for (i = 0; i < 6; ++i) {
for (j = 0; j < i+1; ++j) {
printf("%-3d ", a[i][j]);
}
printf("\n");
}
}
另一种杨辉三角
//指针方法 对踢出环的元素置0
```c
8. int Ring[MAX_SIZE];
9. int i, n;
10. int cnt; //代表报的数
11. int pos; //当前位置数
12. int num; //当前环中的人数
13. int *p = Ring; //用指针访问数组
14.
15. //输入环中的初始人数
16. printf("input the n.\n");
17. scanf("%d", &n);
18.
19. //输入一些元素
20. for (i = 0; i < n; i++)
21. *(p+i) = i+1;
22.
23. //报数 去 3
24. num = n;
25. pos = 0;
26. cnt = 0;
27.
28. while (num != 1) //一直报到剩下一个人
29. {
30. if(*(p + pos) != 0) ++cnt; //对当前元素报数
31. if (cnt == 3) //报到 3 了
32. {
33. *(p + pos) = 0; //踢出环
34. --num; //环大小-1
35. cnt = 0; //重置报的数
36. }
37. ++pos; //指向下一个元素
38. if(pos == n) //到环尾则返回环头
39. pos = 0;
40. }
41. while (*p == 0) p++; //找到最后剩下的那个元素
42. printf("%d is left",*p);
44. return 0;
45.
46. }
//数组方法
//对踢出环的元素置0
#define MAX 8
int main() {
int i,j;
int a[MAX] = { 0 }; //人
for (i = 0; i < MAX; ++i) { //填入数组
a[i] = i+1;
}
//int *p = a;
//int num=MAX; //环中人数
//int cnt = 0;; //count 代表报的数
//int pos = 0; //当前位置
//while (num > 1) {
// if (*(p + pos) != 0) {
// ++cnt; //报数
// }
// if (cnt == 3) { //报到3
// *(p + pos) = 0;
// --num;
// cnt = 0; //重置报的数
// }
// ++pos;
// if (pos == MAX) { //到环尾 返回环头
// pos = 0;
// }
//}
//while (*p == 0) {
// p++;
//}
//printf("%d\n", *p);
int cnt=0;
int num = MAX;
int pos = 0;//当前位置
//当cnt数到3时 把当前位置元素置为0
while (num > 1) {
if (a[pos] != 0) {
++cnt;
}
if (cnt == 3) {
a[pos] = 0;
--num;
cnt = 0; //重置报数
}
++pos;
if (pos == MAX) {
pos = 0;
}
}
i = 0;
while (a[i] == 0) {
++i;
}
printf("%d\n", a[i]);
}
//方法一
int main() {
int total = 6; //桃子总数 最少六个
int num;
int i;
while (1) {
num = total;
for (i = 1; i <= 5; ++i) { //被5只猴子分
if (num % 5 == 1) {
--num;
num = num - num / 5;
}
else {
++total;
break;
}
}
if (i == 6) {
printf("%d\n", total);
break;
}
}
}
//题错了 +1的时候永远不可能成立
int main() {
int num; //代表??
int total1, total2,total3,total4;
for (num = 10; num <= 99; ++num) { //??为两位数
total1 = 809 * num;
total2 = 800 * num + 9 * num +1;
total3 = 8 * num;
total4 = 9 * num;
if (total1 == total2 &&total3<=99&&total3>=10&&total4>=100&&total4<=999 ) {
printf("??=%d\n809*??=%d\n", num, num * 809);
return;
}
}
printf("no\n");
}
当一个数的最后一位为奇数时,那么这个数一定为奇数,不管前面几位是什么数字。如果最后一位数为偶数,则这个数一定为偶数。
int main() {
int num = 4; //只有一位数时 有四个是奇数 1 3 5 7
int i;
for (i = 2; i <= 8; ++i) {
/*if (i == 2) {
num = num + 6*4;
}
else {
num = num + 6 * 4 * pow(7, i - 2);
}*/
num = num + 7 * 4 * pow(8, i - 2);
}
printf("%d\n", num);
}
//方法2
#include <stdio.h>
int main()
{
long sum = 4, s = 4;//sum的初始值为4表示,只有一位数字组成的奇数个数为4个
int j;
for (j = 2; j <= 8; j++) {
printf("%d位数为奇数的个数%ld\n", j-1, s);
if (j <= 2) {
s *= 7;
} else {
s *= 8;
}
sum += s;
}
printf("%d位数为奇数的个数%ld\n", j-1, s);
printf("奇数的总个数为:%ld\n", sum);
return 0;
}
//判断素数 能被2-根号m sqrt(m)之间的任意数整除 则不是素数
int judge(int n) {
//double m;
for (int i = 2; i <= sqrt(n); ++i) {
if (n%i == 0) {
return 0; //不是素数
}
}
return 1;
}
int main() {
int n = 100;
int i; //组成偶数的数
for (i = 1; i <= n; ++i) {
if (judge(i) && judge(n - i)) { //都是素数
printf("假设成立\n");
return;
}
}
printf("假设错误\n");
}
int main() {
int n = 13; // 9%n==0 99%n==0 999%n==0...
int cnt = 1;//被cnt个9整除
int sum = 9;
while (1) {
if (sum % n == 0) {
printf("%d\n", cnt);
return;
}
else {
sum = sum * 10 + 9;
++cnt;
}
}
printf("%d\n", cnt);
}
int main() {
int num;
scanf("%d", &num);
int num1=0,num2=0;
int rem;
int new_num[4] = { 0 };
int cnt = 0;
int i;
for (i = 0; i <4; ++i) { //个位数存在第一位
new_num[i] = (num % 10+5)%10;
num /= 10;
}
int temp;
//第四位和第一位交换
temp = new_num[0];
new_num[0] = new_num[3];
new_num[3] = temp;
//第二位和第三位交换
temp = new_num[1];
new_num[1] = new_num[2];
new_num[2] = temp;
num = 0;
for (i = 0; i < 4; ++i) {
num += new_num[i] * pow(10, i);
}
printf("%d\n", num);
}
void move(char x, char y) {
printf("%c--->%c\n", x, y);
}
void hanoi(int n,char a, char b, char c) { //将n个盘子 从a经过b放到c
if (n == 1) { //只有一个盘子 直接移到c
move(a, c);
}
else {
hanoi(n - 1, a, c, b); //将a的n-1个盘子经过c移到b
move(a, c); //将a剩下的盘子直接移到c
hanoi(n - 1, b, a, c); //将b的n-1个盘子经过a移到c
}
}
//把a的n个盘子放到c
int main() {
int n;
scanf("%d", &n);
hanoi(n, 'a', 'b', 'c');
}