OLD
以往旧的内容:不值一提
推箱子单关卡
初次使用二维数组并编写经典小游戏:推箱子!(单关卡)
注:查阅过百度,烦请喷哥留德。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
| #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <conio.h> #define H 8 #define L 8 int x,y; int map[H][L]= { {0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 4, 1, 0, 0, 0}, {0, 0, 1, 0, 1, 1, 1, 1}, {1, 1, 1, 3, 0, 3, 4, 1}, {1, 4, 0, 3, 2, 1, 1, 1}, {1, 1, 1, 1, 3, 1, 0, 0}, {0, 0, 1, 1, 4, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 0, 0} }; void draw_map(); void move(); void x_y();
int main() { while(1) { system("cls"); draw_map(); move(); } }
void draw_map() { int i,j; for(i=0;i<H;i++) { for(j=0;j<L;j++) { switch(map[i][j]) { case 0:printf("--");break; case 1:printf("■");break; case 2:printf("♀");break; case 3:printf("◆");break; case 4:printf("¤");break; case 6:printf("♂");break; case 7:printf("★");break; } } printf("\n"); } }
void move() { x_y(); boxs_num() ; char WASD; WASD =_getch(); switch(WASD) { case 'W':case 'w':case 72: if( map[x-1][y] == 0 || map[x-1][y] == 4) { map[x][y] -=2; map[x-1][y] +=2; } else if( map[x-1][y] == 3 || map[x-1][y] == 7) { if(map[x-2][y] == 0 || map[x-2][y] == 4 ) { map[x][y] -=2; map[x-1][y] -=1; map[x-2][y] +=3; } } break; case 'S':case 's':case 80: if( map[x+1][y] == 0 || map[x+1][y] == 4) { map[x][y] -=2; map[x+1][y] +=2; } else if( map[x+1][y] == 3 || map[x+1][y] == 7) { if(map[x+2][y] == 0 || map[x+2][y] == 4 ) { map[x][y] -=2; map[x+1][y] -=1; map[x+2][y] +=3; } } break; case 'A':case 'a':case 75: if( map[x][y-1] == 0 || map[x][y-1] == 4) { map[x][y] -=2; map[x][y-1] +=2; } else if( map[x][y-1] == 3 || map[x][y-1] == 7) { if(map[x][y-2] == 0 || map[x][y-2] == 4 ) { map[x][y] -=2; map[x][y-1] -=1; map[x][y-2] +=3; } } break; case 'D':case 'd':case 77: if( map[x][y+1] == 0 || map[x][y+1] == 4) { map[x][y] -=2; map[x][y+1] +=2; } else if( map[x][y+1] == 3 || map[x][y+1] == 7) { if(map[x][y+2] == 0 || map[x][y+2] == 4 ) { map[x][y] -=2; map[x][y+1] -=1; map[x][y+2] +=3; } } break; } }
void x_y() { int i,j; for(i=0;i<H;i++) { for(j=0;j<L;j++) { if(map[i][j] == 2||map[i][j] == 6) {x=i;y=j;} } } printf("人的坐标(%d,%d)\n",x,y); }
int boxs_num() { int i,j,boxs=0; for(i=0;i<H;i++) { for(j=0;j<L;j++) { if(map[i][j] == 3) boxs++; } } if( boxs == 0 ) printf("游戏结束!\n"); }
|
运行结果:
1²+2²+3²+……10²
计算1²+2²+3²+……10²:
源代码:
1 2 3 4 5 6 7 8 9 10 11 12
| #include"stdio.h" int main() { int i,j,sum=0,temp; for(i=1;i<=10;i++) { temp=i*i; sum+=temp; } printf("sum=%d\n",sum); }
|
运行结果:
1+2^2+3^3+4^4+5^5
计算:1+2^2+3^3+4^4+5^5:
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include"stdio.h" #define N 5 int main() { int i,j,temp,sum=0; for(i=1;i<=N;i++) { temp=1; for(j=1;j<=i;j++) temp*=i; sum+=temp; } printf("1+2^2+3^3+4^4+5^5="); printf(" %d\n",sum); }
|
运行结果:
1 3 3 9 2 7 1 4 4 1 6
输出数列: 1 3 3 9 2 7 1 4 4 1 6…… 前20项。
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include"stdio.h" #define N 20 int main() { int a[N],i,j,t=0; a[0]=1; a[1]=3; for(i=2;i<N;i++) { a[i]=a[i-1]*a[i-2]; t=a[i]; if(t>=10) { j=t; a[i]=t/=10; a[++i]=j%=10; } } for(i=0;i<N;i++) printf("%d ",a[i]); }
|
运行结果:
求2+22+222……前7项和
计算 2+22+222+2222+22222+222222+2222222
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include"stdio.h" #define N 7 int main() { int a,b,i,temp=10,sum=0; a=b=2; for(i=0;i<N;i++) { printf("%d+",a) ; sum+=a; a=b*temp+a; temp*=10; } printf("\b=%d\n",sum); }
|
运行结果:
21世纪的闰年和平年
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include"stdio.h" int LeapYear_PeaceYear(int year) { if((year%4==0&&year%100!=0)||year%400==0) return 1; else return 0; } int main() { int year,j=0; printf("21世纪的闰年和平年:\n"); printf("闰年:\n"); for(year=2001;year<=2100;year++) if(LeapYear_PeaceYear(year)==1) { printf("%d ",year); j++; if(j%6==0) printf("\n"); } printf("\n平年:\n"); j=0; for(year=2001;year<=2100;year++) if(LeapYear_PeaceYear(year)==0) { printf("%d ",year); j++; if(j%6==0) printf("\n"); } printf("\n"); }
|
运行结果:
九九乘法表
源代码:
1 2 3 4 5 6 7 8 9 10 11 12
| #include"stdio.h" int main() { int i,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf("%2d*%2d=%2d",i,j,i*j); printf("\n"); } }
|
运行结果:
倒着输出
输入一个整数:123 输出:321
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include"stdio.h" int main() { int x,a,r=0,t=10,e; printf("请输入一个数:\n"); scanf("%d",&x); e=x; while(x) { a=x%10; r=r*t+a; x/=10; } printf("%d---%d\n",e,r); }
|
运行结果:
你知道你活了多少天了吗?
问题:求你存在于这个美丽世界的天数!
如有误 请指出。
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| #include"stdio.h" int main() { int days_of_year(int year); int between_year_brgin_and_year_end(int year_begin,int year_end) ; int days(int year,int month,int day); int year_begin,month_begin,day_begin,sum_begin=0; int year_end,month_end,day_end,sum_end=0; int sum_middle=0; printf("请输入起始日期:\n"); scanf("%d%d%d",&year_begin,&month_begin,&day_begin); sum_begin=days(year_begin,month_begin,day_begin); sum_begin+=day_begin; printf("请输入截止日期:\n"); scanf("%d%d%d",&year_end,&month_end,&day_end); sum_end=days(year_end,month_end,day_end); sum_end+=day_end; sum_middle+=between_year_brgin_and_year_end(year_begin,year_end); if(year_begin!=year_end) sum_begin=days_of_year(year_begin)-sum_begin; printf("%d/%d/%d--",year_begin,month_begin,day_begin); printf("%d/%d/%d", year_end,month_end,day_end); if(year_begin==year_end) printf("相隔: %d天\n",sum_end-sum_begin); else printf("相隔:%d天\n",sum_begin+sum_middle+sum_end); if(sum_begin+sum_middle+sum_end>=365) printf("≈%d年\n",(sum_begin+sum_middle+sum_end)/365); } int days_of_year(int year) { if(year%4==0&&year%100!=0||year%400==0) return 366; else return 365; } int between_year_brgin_and_year_end(int year_begin,int year_end) { int sum=0; if(year_begin!=year_end) { for(year_begin+=1;year_begin<year_end;year_begin++) sum+=days_of_year(year_begin); } return sum; }
int days(int year,int month,int day) { int sum=0; switch(month-1) { case 12:sum+=31; case 11:sum+=30; case 10:sum+=31; case 9:sum+=30; case 8:sum+=31; case 7:sum+=31; case 6:sum+=30; case 5:sum+=31; case 4:sum+=30; case 3:sum+=31; case 2:if(year%4==0&&year%100!=0||year%400==0) sum+=29; else sum+=28; case 1:sum+=31; } return sum; }
|
运行结果:
斐波拉契数列
fibonacci sequence
利用数组求出斐波拉契数列前20项:
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include"stdio.h" #define N 20 int main() { int a[N],i; a[0]=a[1]=1; printf("斐波拉契数列:\n"); for(i=2;i<N;i++) { a[i]=a[i-1]+a[i-2]; } for(i=0;i<N;i++) { printf("%d ",a[i]); } }
|
运行结果:
质数
除了1和它本身以外不再有其他因数的自然数。
我认为除了1和它本身之外 太孤独了!
so lonely_number()
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include"stdio.h" int lonely_number(int number) { int i; for(i=2;i<=number/2;i++) if(number%i==0) break; if(i>number/2) return 1; else return 0; } int main() { int i,j=0; printf("1000以内的质数(素数):\n"); for(i=1;i<=1000;i++) { if(lonely_number(i)) { printf("%3d ",i); j++; if(j%10==0) printf("\n"); } } }
|
运行结果:
max min sum ave
输入N个数字求出
最大值和最小值
和
平均值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <stdio.h> #define N 5 int main() { int a[N],i,sum=0,ave,max,min; printf("请输入%d个整数:",N); for(i=0;i<N;i++) scanf("%d",&a[i]); for(i=0;i<N;i++) sum+=a[i]; max=min=a[0]; for(i=0;i<N;i++) { if(a[i]>max) max=a[i]; else if(a[i]<min) min=a[i]; } ave=sum/N; printf("max=%d\nmin=%d\nsum=%d\nave=%d\n",max,min,sum,ave); }
|
运行结果:
请输入5个整数:1 2 3 4 5
max=5
min=1
sum=15
ave=3
使用python画❤
利用python画一个❤
导入 turtle 库 并起一个别名为: t
这样便于操作:
有点粗糙!
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| import turtle as t
t.color('black') t.pensize(2) t.circle(40) t.right(90) t.forward(110) t.right(45) t.forward(60) t.penup() t.backward(60) t.left(43) t.pendown() t.goto(45,-111) t.goto(45,-180) t.penup() t.goto(0,-45) t.left(90) t.pendown() t.goto(70,-45) t.goto(89,-30) t.penup() t.goto(0,-55) t.pendown() t.goto(72,-55) t.right(34) t.forward(22) t.penup() t.left(34) t.goto(199,-50) t.pendown()
t.pensize(1)
t.delay(0)
def h(): for i in range(200): t.right(1) t.forward(1)
t.color('red','pink') t.begin_fill() t.left(140) t.forward(111.65) h() t.left(120) h() t.forward(111.65) t.end_fill()
t.hideturtle()
|
运行结果:
完全数(1000以内)(Perfect number)
输出1000以内的完全数(Perfect number)
如果一个数恰好等于它的因子之和,则称该数为“完全数”
如: 6 ,28, 469 ……
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <stdio.h>
int perfect_number(int number) { int s,j; s=0; for(j=1;j<=number/2;j++) if(number%j==0) s+=j; if(number==s) return 1; else return 0; } int main(int argc, char *argv[]) { int number; printf("1000以内的完数:\n"); for(number=1;number<=1000;number++) if(perfect_number(number)==1) printf("%d ",number); }
|
运行结果:
百钱买鸡
我国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”:
鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
公鸡一只五元,母鸡一只三元,小鸡崽崽三只一元。
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include"stdio.h" int main() { int cock,hen,chick; for(cock=0;cock<=20;cock++) for(hen=0;hen<=33;hen++) for(chick=3;chick<=99;chick++) if(cock*5+hen*3+chick/3==100) if(cock+hen+chick==100) if(chick%3==0) printf("cock:%d hen:%d chick:%d\n",cock,hen,chick); }
|
运行结果:
大小写互换
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include"stdio.h" #define N 100 int main() { int i; char ch[N]; printf("请输入一串字符:\n"); gets(ch); for(i=0;i<N;i++) { if(ch[i]>='a'&&ch[i]<='z') ch[i]-=32; else if(ch[i]>='A'&&ch[i]<='Z') ch[i]+=32; } puts(ch); }
|
运行结果:
单词个数
编写一个程序记录这行一共有多少个单词!
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include"stdio.h" #define N 100 int main() { char ch[N]; int i,sum=0; printf("请输入一句话:\n"); gets(ch); for(i=0;ch[i]!='\0';i++) { if(ch[i]!=' '&&(ch[i+1]==' '||ch[i+1]=='\0')) { sum++; } } printf("一共有 %d 个单词!\n",sum); }
|
运行结果:
二分查找
输入一个数,确定它在数组中的位置,如果没有这个数输出-1,否则输出它的下标!
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include <stdio.h> #define N 5 int main(int argc, char *argv[]) { int a[N],i,j,t,h,e,m,n; m=h=0; e=N-1; printf("请输入%d个整数:\n",N); for(i=0;i<N;i++) scanf("%d",&a[i]); for(i=0;i<N-1;i++) for(j=N-1;j>i;j--) if(a[j]>a[j-1]) t=a[j],a[j]=a[j-1],a[j-1]=t; printf("此数组:"); for(i=0;i<N;i++) printf("%d ",a[i]); putchar('\n'); printf("请输入您要查找的数:\n"); scanf("%d",&n); while(h<=e) { m=(h+e)/2; if(a[m]==n) break; else if(n>a[m]) e=m-1; else h=m+1; } if(h<=e) printf("%d的下标为%d\n",n,m); else printf("-1\n"); }
|
运行结果:
汉洛塔
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
假如每秒钟一次,共需多长时间呢?一个平年365天有31536000 秒,闰年366天有31622400秒,平均每年31556952秒,计算一下:
18446744073709511615秒
这表明移完这些金片需要5845.54亿年以上,而地球存在至今不过45亿年,太阳系的预期寿命据说也就是数百亿年。真的过了5845.54亿年,不说太阳系和银河系,至少地球上的一切生命,连同梵塔、庙宇等,都早已经灰飞烟灭。
分析:
①: 如果只有 1 个 则 直接从 A 柱 移动到 C 柱
②:>1:
1: 将 n-1 个盘子,从 A 借助 C 移动到: B
2: 将 A 上剩下的 1 个 盘子移动到 C
3: 将 n-1 个盘子, 从 B 借助 A 移动到: C
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include"stdio.h"
int s=0,i=1;
void h(int n,char a,char b,char c) { if(n==1) { printf("%5d : %c------>%c\n",i++,a,c); s++; } else { h(n-1,a,c,b); printf("%5d : %c------>%c\n",i++,a,c); h(n-1,b,a,c); s++; } }
int main() { int n; printf("请输入有几个盘子:"); scanf("%d",&n); h(n,'A','B','C'); printf("%d个盘子供需移动:%d次!\n",n,s); }
|
运行结果:
猴子吃桃
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,发现只剩下一个桃子了。求一共有多少个桃!
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
#include"stdio.h" int main() { int day,peach_before,peach_after=1; for(day=10;day>1;day--) { peach_before=(peach_after+1)*2; peach_after = peach_before; } printf("总共有 %d 个桃!\n",peach_before); }
|
运行结果:
回文数
“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number
设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。
简单来说: 正读与反读都一样!
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include"stdio.h" int h_h(int x) { int i,j,m; for(i=0;i<x;i++) { j=i; m=0; while(j) { m=m*10+j%10; j/=10; } if(i==m) printf("%d ",i); } return i; } int main() { int x,y,i; printf("请输入一个范围 如:100\n"); scanf("%d",&x); if(h_h(x)); }
|
运行结果:
阶乘
比如 5!=5X4X3X2X1 =120
6! =6X5X4X3X2X1 =720
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include"stdio.h" int main() { int a,i; double sum=1; printf("请输入一个数:\n"); scanf("%d",&a); for(i=1;i<=a;i++) { sum*=i; } printf("%d!=%f\n",a,sum); }
|
运行结果:
冒泡法排序
冒泡法排序:
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include"stdio.h" #define N 5 int main() { int a[N],i,j,t; printf("请输入%d个数:\n",N); for(i=0;i<N;i++) { scanf("%d",&a[i]); } for(i=0;i<N-1;i++) { for(j=N-1;j>i;j--) { if(a[j]>a[j-1]) { t=a[j],a[j]=a[j-1],a[j-1]=t; } } } printf("冒泡法排序 降序:\n"); for(i=0;i<N;i++) { printf("%d ",a[i]); } }
|
运行结果:
x%2==0&&x%3==0
输入一些正整数(以0表示结束),统计并输出能被3整除的偶数的数及个数!
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include"stdio.h" #include"stdlib.h" int main() { int i,s=0; printf("请输入一些正整数(以0结束):\n"); while(1) { scanf("%d",&i); if(i==0) break; else if(i%2==0&&i%3==0) { s++; printf("%d,",i); } } if(s==0) exit(0); else printf("————能被3整除的偶数 共%d个!\n",s); }
|
运行结果:
计算三角形的类型和面积
海伦公式:
海伦公式,传说中是古代的叙拉古国王希伦二世发现的公式,利用三角形的三边来求三角形的面积,但后人求证出此公式其实是 阿基米德这个老头发现的! (详细情况请自行百科:)
ps:中国宋代的数学家秦九韶在1247年独立提出了“三斜求积术”
一个三角形 三边分别为: a、b、c,s为面积
s=(a+b+c)/2
s=根号{s(s-a)(s-b)(s-c)}
此公式就摆脱了 高与底
#include”math.h”
<math.h> 头文件包含了一系列与数学计算相关的函数和宏。
sqrt(平方根计算)
sqrt 就是公式中的根号,用法: sqrt(xxxx)
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include"stdio.h" #include"math.h" int main() { float a,b,c,area,s; printf("请输入三角形的三边长:\n"); scanf("%f%f%f",&a,&b,&c); if(a+b>c||a+c>b||b+c>a) { s=(a+b+c)/2; area=(float)sqrt(s*(s-a)*(s-b)*(s-c)); printf("三角形的面积:%f\n",area); if(a==b&&a==c) printf("此为:等边三角形!\n"); else if(a==b||a==c||b==c) printf("此为:等腰三角形!\n"); else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a) printf("此为:直角三角形!\n"); else printf("此为:普通三角形!\n"); } else printf("不能构成三角形!\n"); }
|
运行结果:
十进制转二进制
编写一个C程序实现进制转换:
10 to 2:
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <stdio.h> int stoe(int number) { int i,e=1; long sum=0; while(number) { sum+=number%2*e; number/=2; e*=10; } return sum; } int main(int argc, char *argv[]) { int x; long y=0; printf("请输入一个整数:"); scanf("%d",&x); y=stoe(x); printf("十进制:%d\n二进制%ld\n",x,y); }
|
运行结果:
十进制转二进制数组
编写一个c程序实现使用数组进行进制转换:
10 to 2:
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include"stdio.h" #define N 100 int main() { int a[N],i=0,x; printf("please enter number:\n"); scanf("%d",&x); printf("十进制:%d\n",x); while(x) { a[i]=x%2; x/=2; i++; } printf("二进制:"); for(i--;i>=0;i--) printf("%d",a[i]); printf("\n"); }
|
运行结果:
水仙花
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include"stdio.h" int sxh(int x) { int a,b,c,s; a=x%10; b=x/10%10; c=x/100; s=a*a*a+b*b*b+c*c*c; if(x==s) return 1; else return 0; } int main() { int x,y; printf("所有的水仙花:\n"); for(x=100;x<=999;x++) { if(sxh(x)) printf("%d ",x); } }
|
运行结果:
顺序查找
输入一个数,确定它在数组中的位置,如果没有这个数输出-1,否则输出它的下标!
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include"stdio.h" #define N 5 int main() { int a[N],i,x; printf("请输入%d个数:\n",N); for(i=0;i<N;i++) scanf("%d",&a[i]); printf("此数组:"); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n请输入你要查找的数字:\n"); scanf("%d",&x); for(i=0;i<N;i++) if(a[i]==x) break; if(i<N) printf("%d的下标为%d\n",x,i); else printf("-1\n"); }
|
运行结果:
提取数字或字母
输入一串字符提取其中的数字或字母!
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include"stdio.h" #define N 100 int main() { char ch[N]; int i,j; gets(ch); for(i=j=0;ch[i]!='\0';i++) { if(ch[i]>='0'&&ch[i]<='9') { ch[j]=ch[i]; j++; } } ch[j]='\0'; puts(ch); }
|
运行结果:
同构数
正整数n若是它平方数的尾部,则称n为同构数。
例如:5的平方数是25,且5出现在25的右侧,那么5就是一个同构数.。
输出 1000 以内的同构数:
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include"stdio.h" #define N 1000 int main() { int i,s; printf("%d 内的同构数:\n",N); for(i=1;i<=N;i++) { s=i*i; if(s%10==i||s%100==i||s%1000==i) { printf("%d---%d ",i,s); } } printf("\n\n"); }
|
运行结果:
同构数
正整数n若是它平方数的尾部,则称n为同构数。
例如:5的平方数是25,且5出现在25的右侧,那么5就是一个同构数.。
输出 1000 以内的同构数:
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include"stdio.h" int main() { int i; int t(int n); for(i=1;i<1000;i++) { if(t(i)==1) printf("%d ",i); } } int t(int n) { int pp=0; pp=n*n; while(n) { if(n%10!=pp%10) break; n/=10; pp/=10; } if(n==0) return 1; else return 0; }
|
运行结果:
完全数(Perfect number)
判断一个数是否为完全数(Perfect number)
如果一个数恰好等于它的因子之和,则称该数为“完全数”
如: 6 ,28, 469 ……
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include"stdio.h" int main() { int number,sum=0,i; printf("请输入一个数:\n"); scanf("%d",&number); for(i=1;i<=number/2;i++) { if(number%i==0) sum+=i; } if(number==sum) printf("%d是完数\n",number); else printf("%d不是完数\n",number); }
|
运行结果:
基姆拉尔森计算公式
通过使用基姆拉尔森计算公式计算星期几!!!
W= (d+2m+3(m+1)/5+y+y/4-y/100+y/400+1)%7
公式中d表示日期中的日数,m表示月份数,y表示年数
注意:把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
源代码:
①:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include"stdio.h" int main() { char *weekday[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; int year,month,day,w; printf("请输入年/月/日:\n"); scanf("%d%d%d",&year,&month,&day); if(month==1) { month=13; year--; } else if(month==2) { month=14; year--; } w=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400+1)%7; printf("%d/%d/%d :%s\n",year,month,day,weekday[w]);
}
|
②:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include"stdio.h" int main() { int year,month,day,weekday; printf("请输入年/月/日:\n"); scanf("%d%d%d",&year,&month,&day); if(month==1) { month=13; year--; } else if(month==2) { month=14; year--; } weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400+1)%7; printf("%d/%d/%d :",year,month,day); switch(weekday) { case 0:puts("Sunday");break; case 1:puts("Monday");break; case 2:puts("Tuesday");break; case 3:puts("Wednesday");break; case 4:puts("Thursday");break; case 5:puts("Friday");break; case 6:puts("Saturday");break; }
}
|
运行结果:
选择排序
选择排序
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include"stdio.h" #define N 5 int main() { int a[N],i,j,t; printf("请输入%d个数:\n",N); for(i=0;i<N;i++) { scanf("%d",&a[i]); } for(i=0;i<N-1;i++) { for(j=i+1;j<N;j++) { if(a[j]>a[i]) { t=a[j],a[j]=a[i],a[i]=t; } } } printf("选择排序 降序:\n"); for(i=0;i<N;i++) { printf("%d ",a[i]); } }
|
运行结果:
渔夫打渔晒网
如果一个渔夫从 2019 年 1 月 1 日开始每三天打一次渔,两天晒一次网,编程实现当输入 2019 1 月 1 日以后的任意一天,输出该渔夫是在打渔还是在晒网。
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
#include"stdio.h"
int main() { int leap(int year); int number(int y,int m,int d); int year,month,day,sum=0; printf("请输入年/月/日:\n"); scanf("%d%d%d",&year,&month,&day); if(leap(year)==366) printf("%d年是闰年!\n",year); else printf("%d年是平年!\n",year); sum=number(year,month,day); if(sum%5<4&&sum%5>0) printf("%d/%d/%d :打渔!\n",year,month,day); else printf("%d/%d/%d :晒网!\n",year,month,day); }
int leap(int year) { if(year%4==0&&year%100!=0||year%400==0) return 366; else return 365; }
int number(int y,int m,int d) { switch(m-1) { case 11:d+=30; case 10:d+=31; case 9:d+=30; case 8:d+=31; case 7:d+=31; case 6:d+=30; case 5:d+=31; case 4:d+=30; case 3:d+=31; case 2:if(y%4==0&&y%100!=0||y%400==0) d+=29; else d+=28; case 1:d+=31; } return d; }
|
运行结果:
输入一串字符统计里面各个大写字母的个数
(其它字符同理)
源代码:
无详解!具体自己分析!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include"stdio.h" int main() { int sum[26],i; char ch; for(i=0;i<26;i++) sum[i]=0; while((ch=getchar())!='\n') if(ch>='A'&&ch<='Z') sum[ch-65]++; for(i=0;i<26;i++) if(sum[i]!=0) printf("字母 %c 有 %d 个!\n",i+65,sum[i]); }
|
运行结果:
最大公约数&&最小公倍数
公约数,亦称“公因数”。它是一个能被若干个整数同时均整除的整数。如果一个整数同时是几个整数的约数,称这个整数为它们的“公约数”;公约数中最大的称为最大公约数。对任意的若干个正整数,1总是它们的公因数。
公倍数(common multiple)是指在两个或两个以上的自然数中,如果它们有相同的倍数,这些倍数就是它们的公倍数。公倍数中最小的,就称为这些整数的最小公倍数(lowest common multiple)
示意图:
穷举法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include"stdio.h"
int max_gys(int number,int number_2) { int i,gys=1; if(number>number_2) i=number,number=number_2,number_2=i; for(i=1;i<=number;i++) if(number%i==0&&number_2%i==0) gys=i; return gys;
}
int min_gbs(int number,int number_2) { int i,gbs; if(number>number_2) i=number,number=number_2,number_2=i; for(i=number;i>0;i++) if(i%number==0&&i%number_2==0) { gbs=i; break; } return gbs; } int main() { int i,a,b,m,n,t,gy,gb; printf("请输入两个数:\n"); scanf("%d%d",&a,&b); m=a,n=b; printf("%d 和 %d 的最大公约数:%d\n",m,n,max_gys(a,b)); printf("%d 和 %d 的最小公倍数:%d\n",m,n,min_gbs(a,b)); }
|
短除法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include"stdio.h"
int max_gys(int number,int number_2) { int i,gys=1; if(number<number_2) i=number,number=number_2,number_2=i; for(i=2;i<=number; ) { if(number%i==0&&number_2%i==0) { number/=i; number_2/=i; gys*=i; } else i++; } return gys; } int main() { int i,a,b,m,n,gy=1,gb=1,t; printf("请输入两个数字:\n"); scanf("%d%d",&a,&b); m=a,n=b; gb=m*n/max_gys(a,b); printf("%d 和 %d的最大公约数为:%d\n",m,n,max_gys(a,b)); printf("%d 和 %d的最小公倍数为:%d\n",m,n,gb); }
|
辗转相除法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include"stdio.h" int main() { int a,b,r,m,n,gb; printf("请输入两个数:\n"); scanf("%d%d",&a,&b); m=a,n=b; while(b) { r=a%b; a=b; b=r; } gb=m*n/a; printf("%d和%d的最大公约数为:%d\n",m,n,a); printf("%d和%d的最小公倍数为:%d\n",m,n,gb); }
|
减法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include"stdio.h" int main() { int a,b,m,n,gb; printf("请输入两个数:\n"); scanf("%d%d",&a,&b); m=a,n=b; while(a!=b) { if(a>b) a-=b; if(b>a) b-=a; } gb=m*n/a; printf("%d和%d的最大公约数为:%d\n",m,n,a); printf("%d和%d的最小公倍数为:%d\n",m,n,gb); }
|
最终结果: