算法
车晋强
车晋强的个人总结
展开
-
矩阵旋转90度
/将矩阵旋转90度,编出通用程序,要求程序中只用一个数组。#include#define N 5void main(){ int i,j,v,a[N+1][N+1],k=0; for(i=1;i for(j=1;j {a[i][j]=++k;cout cout } cout for(i=1;i for(j=i;j { v=a[i原创 2015-03-08 14:46:02 · 324 阅读 · 0 评论 -
跳马程序的递归穷举三
#include"iostream.h"#include"string.h"#include"iomanip.h"#define N 5#define N 5int map[N][N];//数组int direction[8][2]= {{1, 2}, {2, 1}, {1,-2}, {2, -1}, {-1, 2}, {-2原创 2015-03-06 16:41:35 · 387 阅读 · 0 评论 -
背包问题
//小明有一个能装10公斤物品的网袋,现在有大白菜一颗重5公斤,猪肉一块2公斤,鱼一条3.5公斤,酱油连瓶1.7公斤,白糖一袋1公斤,菜油一桶5.1公斤//请设计一个程序,使小明的网袋所装的重量最大。#includevoid main(){ float a,b,c,d,e,f,s,s0,aa,bb,cc,dd,ee,ff; s0=20; for(a=0;a for(b原创 2015-03-06 17:18:20 · 610 阅读 · 1 评论 -
6面彩旗
//有6面彩旗,两面红旗,两面黄旗,两面蓝旗。将6面彩旗排成一排,问有多少种排法#includeint count=0;void main(){ char color[4]={'r','r','o','b'}; int a,b,c,d,e,f; for(a=1;a for(b=1;b for(d=1;d for(c=1;c for(e=1原创 2015-03-08 14:47:40 · 762 阅读 · 0 评论 -
谁在说慌
张三说李四说谎,李四说王五说谎,王五说张三,李四都说谎。到底谁在说谎? 解:用a,b,c分别代表张三,李四和王五,且假设取0时说真话,取1时说假话。则有下面的逻辑:通过程序,输出不矛盾的各值。#includevoid main(){ int a,b,c; for(a=0;a for(b=0;b for(c=0;c { if(a==0)原创 2015-03-06 17:15:34 · 717 阅读 · 0 评论 -
谁戴白帽
厅内有五个人,已知戴白帽的人说真话,戴红帽的人说假话。请根据他们的自白辨别各人帽子的颜色。(假设有两个人说真话);甲说:我只看见一个戴白帽子的。乙说:我没看见戴红帽子的。丙说:我看见一个戴白帽子的,但不是甲。丁说:我没看见戴白帽子的。戊说:我的话和丙一样。 解法:用,a,b,c,d,e分别代表这五个人。设取值为1时说真话,取值为0时说假话。经过逻辑推理原创 2015-03-06 17:15:04 · 829 阅读 · 0 评论 -
巧加括号
式1-2-3+4-5+6=9不成立,请加一对括号使此式成立。#include#includevoid main(){ int a[7]={0,1,-2,-3,4,-5,6}; int i,s1,s2,s3,j,k; s1=0; s2=0; s3=0; for(i=1;i if(a[i] for(j=i+1;j { for(k=1;k原创 2015-03-06 17:14:04 · 450 阅读 · 0 评论 -
母牛生小牛二
同样是上面的题目:若母牛奇岁生母牛,偶岁生公牛。问20年后那个有多少头母牛????//令x1,x2,x3,x4,x5分别表示第N年后刚生下的小母牛,满一年的母牛,满二年的母牛,奇生母牛,偶生母牛。#include#define N 21void main(){ int x1[N]; int x2[N]; int x3[N]; int x4[N]; int原创 2015-03-06 17:04:38 · 601 阅读 · 0 评论 -
巧移花盆
//有2N盆花,N盆红花。N盆黄花,开始时杂乱排列,现要求红黄间隔,红花盆放奇数,黄花盆放偶数位置。要求://只用一个数组。比较和交换次数最少#include#define N 7void main(){ int i,j=2; char a[]={' ','r' ,'r','y','y','y','y','y','y','y','r','r','r','r','r'};原创 2015-03-06 17:25:37 · 519 阅读 · 0 评论 -
十进制数转为二进制数
有三个无刻度瓶,大瓶A容量大于中瓶和小瓶的容量,。设有液体体积为 x+y;x和y为奇数。中瓶B的容积为x,小瓶C的容量为 y;试用这三个瓶。使大瓶和中瓶里各盛液体(x+y)/2; 下面给出中文表述的算法:大瓶倒中瓶,中瓶倒小瓶,小瓶倒大瓶。中瓶不空不倒入。小瓶不满不倒出。 中瓶不空不倒入保证了大瓶倒入中瓶液体为0或者为中瓶体积。小瓶不满不倒出保证了小瓶倒入大瓶液体原创 2015-03-06 17:08:43 · 432 阅读 · 0 评论 -
奇阶魔方
下面是一个奇阶魔方:奇阶魔方的意思是说在这个矩阵当中,横行或竖排加起来的和相等。请编写一个生成奇阶魔方的通用程序在:30 39 48 1 10 19 2838 47 7 9 18 27 29 46 6 8 17 26 35 37 5 14 16 25 34 36 45 13 15 24 33 42 44 421 23 32 41 43 3 1222原创 2015-03-06 17:08:21 · 404 阅读 · 0 评论 -
菲波拉契数列
计算菲波拉契数列的前21项。解:菲波列数列的计算公式是:第一项为0,第二项为1.第三项为前两项之和。求前21项的值。#include#define N 21void main(){ int f[N]; f[0]=0; f[1]=1; int i; for(i=2;i f[i]=f[i-1]+f[i-2]; for(i=0;i cout原创 2015-03-06 17:02:27 · 1349 阅读 · 0 评论 -
内螺旋矩阵
//请编写一任意阶内螺旋矩阵通用程序#include#define N 7void main(){ int a[N+1][N+1]; int i,j,i0,j0,k=1; for(i=1;i for(j=i;j a[i][j]=k++; for(i0=i;i0 a[i0][N-i+1]=k++; for(j0=N-i+1;j0>i;j0--原创 2015-03-08 14:45:21 · 470 阅读 · 0 评论 -
三瓶分液
有三个无刻度瓶,大瓶A容量大于中瓶和小瓶的容量,。设有液体体积为 x+y;x和y为奇数。中瓶B的容积为x,小瓶C的容量为 y;试用这三个瓶。使大瓶和中瓶里各盛液体(x+y)/2; 下面给出中文表述的算法:大瓶倒中瓶,中瓶倒小瓶,小瓶倒大瓶。中瓶不空不倒入。小瓶不满不倒出。 中瓶不空不倒入保证了大瓶倒入中瓶液体为0或者为中瓶体积。小瓶不满不倒出保证了小瓶倒入大瓶液体原创 2015-03-06 17:09:16 · 578 阅读 · 1 评论 -
母牛手小牛一
某人在年初买了一头刚生下的母牛,3年后的年初,小母牛生下了一头小母牛,假设以后每年年初,那头母牛都生下一头小母牛,而所有小母牛也会在三年后的年初生下一头小母牛。且以后每年年初都会同样生下一头小母牛。问20年后那个有多少母牛???//令x1,x2,x3,x4分别表示第N年后刚生下的小母牛,满一年的母牛,满二年的母牛,可生小母牛的母牛。#include#define N 21void原创 2015-03-06 17:03:56 · 523 阅读 · 0 评论 -
骨牌覆盖序列
请根据下面给出的有关数据归纳出带计算过程和计算条件的递推公式并编出通用计算程序。1231 41 2 51 2 3 1 61 2 3 1 4 1 2 71 2 3 1 4 1 2 5 1 2 3 1 81 2 3 1 4 1 2 5 1 2 3 1 6 1 2 3 1 4 1 2 9解析:从上中行数据总结出以下规律:第N行中最后一个数为N从第4行开原创 2015-03-06 17:03:06 · 282 阅读 · 0 评论 -
所得税问题
V若所得税按下式计算:y为所得税.x为月收入 y= 0 x (x-2000)*3% 2000 (x-5000)*5%+90 5000 (x-10000)*10%+340 10000 (x-100000)*30%+9340 x>100000该题原创 2015-03-06 16:58:59 · 327 阅读 · 0 评论 -
找肖像
数学家斯摩林将莎士比亚的名剧《威尼斯商人》取出一段编成一道趣味数学题:这里有三个盒子,一只金盒,一只银盒,一只铅盒。她的肖像放在其中一个盒子内,三只盒子上各写了一句话。只有一句是真的。盒子以及所写语句如图所示:金盒上写的是肖像在此盒内。银盒上写的是肖像不在此盒内。铅盒上写的是肖像不在金盒内。请根据上述判断盒子在哪个里面??解法:用a,b,c分别代表金盒,银盒,铅盒。取1时盒原创 2015-03-06 17:17:48 · 556 阅读 · 0 评论 -
均分两组数
//有值为sqrt(i)的10个数,将其分成两组,每组5个数。让两组数之和的差绝对值最小。#include#includevoid main(){ int i,j,k,l,m,ii,jj,kk,mm,ll; float a,b,c,d,e,aa,bb,cc,dd,ee,s,s1,s0; s1=0; s=0; for(i=1;i s+=sqrt(i); s=原创 2015-03-06 17:19:05 · 510 阅读 · 0 评论 -
约瑟夫斯问题
有2M个人排成一圈。顺时针1至p报数。报p者出列,当出列人数为M时,游戏结束。编写一个程序输出剩下的M个人原来的编号。#include#define M 20#define P 6void main(){ int a[2*M+1]; int i=0; int k=0; int j=0; for(i=1;i a[i]=i; i=0; while(k原创 2015-03-06 17:10:52 · 415 阅读 · 0 评论 -
特殊拉丁矩阵
n阶拉丁矩阵的定义是每行每列都是1到n的n个数字矩阵。而且各行各列的数字不相同。如五阶拉丁矩阵如下:1 2 3 4 52 3 4 5 13 4 5 1 24 5 1 2 35 1 2 3 4请给出递推公式并编出生成这种拉丁矩阵的通用程序。//从该矩阵可以得出,第一列从1到N。而后每一列是上一列加1.#include#define N 8void main原创 2015-03-06 17:06:26 · 432 阅读 · 0 评论 -
旋转矩阵180度
#include#define N 6void main(){ int a[N+1][N+1]; int i,j,k; for(i=1;i for(j=1;j a[i][j]=(i-1)*N+j; for(i=1;i for(j=1;j cout cout cout cout for(i=1;i for(j原创 2015-03-08 14:45:57 · 2099 阅读 · 0 评论 -
三人分蜜
三个人合伙养蜜。多年后三个人分伙。分伙时蜂已经处理但尚余整桶蜜7桶,半桶蜜7桶,7个空桶。三个平均分。且不动桶中蜜。编一程实现他们的分法。#includevoid main(){ int xa,ya,za,xb,yb,zb,zc,yc,xc;//设三个人为a,b,c for(xa=0;xa for(ya=0;ya for(xb=0;xb for(yb=0;y原创 2015-03-06 17:13:25 · 861 阅读 · 1 评论 -
选猴王
有一群猴子选猴王,它们排成一行,来回从1至p报数,报p者出列,最后一个没有出列的猴子为猴王,请设计一个程序为儿子选猴王。 解:将猴子从左到右编号。#include#define N 30#define P 7void main(){ int a[N+1]; for(int i=1;i a[i]=i; int k=0; int c=1; i=0;原创 2015-03-06 17:10:20 · 587 阅读 · 0 评论 -
八皇后顺序栈实现
#include#include#include#define min 10 //表示顺序栈的初始大小#define max 5 //当初始大小不满足时,每一次的增量#define N 8 int queennumber=0;int queen[N][N];struct queens{ int x; int y;};typ原创 2015-03-06 16:39:39 · 723 阅读 · 2 评论 -
八皇后问题递归求解二
#include#include#define N 8int queen[N][N];int count=1; //用来统计总共有多少种算法int queennumber=1; //用来计算是否达到了八个皇后void createqueen(){ //创造棋盘 int i=0; int j=0; for(;i for(j=0;j原创 2015-03-06 16:40:18 · 242 阅读 · 0 评论 -
小数十翻二
//编写一个将任意十进制小数转换为二进制小数的程序。要求精确到二进制小数点后第N(8)位//将十进制小数转换为二进制小数,采用乘二取整法。#include#define N 8void main(){ float x; cin>>x; int a[8]; int i; for(i=0;i { x=x*2; if(x>=1) {x-=1;原创 2015-03-06 17:07:04 · 446 阅读 · 0 评论 -
水仙花数
找水仙花数。求101到999之间的水仙花数。对于一个三位数来说,水仙花数就是指每一位的立方和为这个三位数。#includevoid main(){ int k; int j; int h; for(int i=101;i k=i%10; j=i/10; j=j%10; h=i/100; if(i==k*k*k+j*j*j+h*h*h)原创 2015-03-06 17:15:37 · 403 阅读 · 0 评论 -
万年历
#include#includevoid rili(int c,int d); //输出某年某月的日历int yearways(int g); //输出某一年的元旦int monthways(int k); //输出当月一号int getdays(int e); //十二个月每个月的天数void nianrili(int c); //输出某年的日历int原创 2015-03-05 14:32:03 · 719 阅读 · 0 评论 -
迷宫求解C++
//第二次尝试#include#include#include#include //因为要用到随机函数产生器#define max_x 20#define max_y 20int maze[max_x][max_y];struct stack{ int maze_x; int maze_y; struct stack *next;};void原创 2015-03-05 14:28:44 · 362 阅读 · 0 评论 -
整型,字符型,字符串型双重快排
#include#include#includeusing namespace std;typedef struct sj{ char name[9],num[7]; int score; int sum;}node;node p[100005],temp;int fun(char s[]){ int i; int转载 2015-03-05 14:25:41 · 348 阅读 · 0 评论 -
一元多项式的乘法C++
#include#includetypedef struct term{ int z; //指数 float x; //系数 struct term *next;}term;struct term *creatlink(); //创建多项式int cmp(int a,int b); //指数比较struct term * addin(s原创 2015-03-05 14:29:21 · 2723 阅读 · 0 评论 -
汉诺塔问题
*汉诺塔问题:据古印度神话,在贝蔓斯的圣庙里安放着一块铜板,板上插有3根一尺长的宝石针,梵天在创造世界的时候,在其中的一根针上摆了由小到大共64片中间有孔的金片。无论白天还是黑夜,都有一位僧人负责移动这些金片,规则是一次只能将一片金片移动到另一根针上,并且在任何时间以及任一根针上,小片永远在大片的上面。当64片金片全部由最初的那根针上移动到另一根针上时,这世界就将消失。*/#inclu原创 2015-03-05 14:28:26 · 387 阅读 · 0 评论 -
皇后问题栈实现
#include#include#include#define M 20#define N 20struct queen{ int x; int y; queen *next;};void push(int xx,int yy,queen *head){static queen *p=head;queen *new_node=(queen *)mal原创 2015-03-05 14:27:46 · 311 阅读 · 0 评论 -
皇后问题
#include #include #include #define max Nint queen[max], sum=0;/* max为棋盘最大坐标 */void show()/* 输出所有皇后的坐标 */{ int i; for(i = 0; i { cout } cout sum++;}int chec原创 2015-03-05 14:26:17 · 297 阅读 · 0 评论 -
二维的完全背包
二维的完全背包,状态转移方程: = max(dp[i][t], dp[i - b[j]][ t- 1] + a[j]);其中b[j]是要消耗的忍耐度,a[j]是获得经验,dp[i][t]就是消耗i 的忍耐度可以获得的最多经验!只要 dp[i][s]>=n时就可以停住了!#includeusing namespace std;int n,m,k,s;int a[101],b[转载 2015-03-05 14:25:20 · 329 阅读 · 0 评论 -
质因数分解
//质因数分解就是说把一个数分成若干个素数相乘的形式。#includevoid main(){ int a[20]; int i=0; int j=0; int m; cin>>m; int n=m; int x=2; while(n!=1){ while(n%x==0){ a[i]=x; i++; n=n/x; }原创 2015-03-06 17:11:23 · 367 阅读 · 0 评论 -
six+six+six=nine+nine
下面是用英文写的一个等式:six+six+six=nine+nine;即:3six=2nine;等式中i,e,n,s,x都是一个阿拉伯数字,请编写一个程序确定这些数字。 解:3(100s+10i+x)=2(1010n+100i+e)i,e,n,s,x互相不相等。#includevoid main(){ int s,i,x,n,e,s1,s2; for(原创 2015-03-06 16:57:36 · 3794 阅读 · 0 评论 -
行李寄存问题
行李寄存题目:某个体小件行李存放处规定:一般行李每件每天2元。超过24小时按两天算,第二天存放费为1.5元。最多不得超过2天,行李尺寸超过60公分每件增收20%;每件行李存寄费不得低于1元。在角上四舍五入,对所有残疾人员打5折。学生打7折。现役军人打8折。请编一行李存放收费程序. 分析:有一个小问题,学生有可能是残疾人。本不采用多重循环。#includevoid main(){原创 2015-03-06 16:59:18 · 604 阅读 · 0 评论 -
迷宫广搜
#include#includeusing namespace std;int T,M,N,k,sx,sy,ex,ey;char map[101][101];bool f[101][101];int dir[4][2] = {1,0,-1,0,0,1,0,-1};struct node{ int x,y; int step;}s,e;queue原创 2015-03-06 16:38:33 · 303 阅读 · 0 评论