Aha code Two
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Aha code Two相关的知识,希望对你有一定的参考价值。
1. 解密QQ号-队列
a.解密算法
#include <stdio.h> int main(void) { int q[102] = {0,6,3,1,7,5,8,9,2,4}, head, tail; int i; //初始化队列 head = 1; tail = 10; //队列中已经有9个元素了,tail指向队尾的后一个位置 while(head < tail)//当队列不为空的时候执行循环 { //打印队首并将队首出队 printf("debug in here 1\n"); printf("%d ", q[head]); head++; //先将新队首的数添加到队尾 q[tail] = q[head]; tail++; //再将队首出队 head++; printf("tail=%d head=%d\n", tail, head); } getchar(); getchar(); return 0; }
终端输出:
debug in here 1
6 tail=11 head=3
debug in here 1
1 tail=12 head=5
debug in here 1
5 tail=13 head=7
debug in here 1
9 tail=14 head=9
debug in here 1
4 tail=15 head=11
debug in here 1
7 tail=16 head=13
debug in here 1
2 tail=17 head=15
debug in here 1
8 tail=18 head=17
debug in here 1
3 tail=19 head=19
b.解密算法(利用结构体)
#include <stdio.h> struct queue { int data[100];//队列的主体,用来存储内容 int head;//队首 int tail;//队尾 }; int main() { struct queue q; int i, n; //初始化队列 q.head=1; q.tail=1; printf("向队列插入待解密的数的个数是:\n"); scanf("%d", &n); printf("依次插入%d个数为:", n); for(i=1;i<=n;i++) { //依次向队列插入5个数 scanf("%d",&q.data[q.tail]); q.tail++; } printf("打印解密后的数为:"); while(q.head < q.tail) //当队列不为空的时候执行循环 { //打印队首并将队首出队 printf("%d ",q.data[q.head]); q.head++; //先将新队首的数添加到队尾 q.data[q.tail] = q.data[q.head]; q.tail++; //再将队首出队 q.head++; } getchar();
getchar(); return 0; }
终端输出
向队列插入待解密的数的个数是:
5
依次插入5个数为:1 2 3 4 5
打印解密后的数为:1 3 5 4 2
2. 解密回文-栈
#include <stdio.h> #include <string.h> int main() { char a[101],s[101]; int i,len,mid,next,top; gets(a); //读入一行字符串 len=strlen(a); //求字符串的长度 mid=len/2-1; //求字符串的中点 printf("len=%d, mid=%d\n", len, mid); top=0;//栈的初始化 //将mid前的字符依次入栈 for(i=0;i<=mid;i++) s[++top]=a[i]; //判断字符串的长度是奇数还是偶数,并找出需要进行字符匹配的起始下标 if(len%2==0) next=mid+1; else next=mid+2; //开始匹配 for(i=next;i<=len-1;i++) { if(a[i]!=s[top]) break; top--; } //如果top的值为0,则说明栈内所有的字符都被一一匹配了 if(top==0) printf("YES"); else printf("NO"); getchar(); getchar(); return 0; } /*编译执行 [email protected]:~/Documents/Exec_important/aha/two_chapter$ ./2_huiwen asdfdsa len=7, mid=2 YES [email protected]:~/Documents/Exec_important/aha/two_chapter$ ./2_huiwen asddfdsa len=8, mid=3 NO */
3. Cat Fishing
#include <stdio.h> struct queue { int data[1000]; int head; int tail; }; struct stack { int data[10]; int top; }; int main(void) { struct queue q1,q2; struct stack s; int book[10]; int i,t; //初始化队列 q1.head=1; q1.tail=1; q2.head=1; q2.tail=1; //初始化栈 s.top=0; //初始化用来标记的数组,用来标记哪些牌已经在桌上 for(i=1;i<=9;i++) book[i]=0; //依次向队列插入6个数 //小哼手上的6张牌 for(i=1;i<=6;i++) { scanf("%d",&q1.data[q1.tail]); q1.tail++; } //小哈手上的6张牌 for(i=1;i<=6;i++) { scanf("%d",&q2.data[q2.tail]); q2.tail++; } while(q1.head<q1.tail && q2.head<q2.tail ) //当队列不为空的时候执行循环 { t=q1.data[q1.head];//小哼出一张牌 //判断小哼当前打出的牌是否能赢牌 if(book[t]==0) //表明桌上没有牌面为t的牌 { //小哼此轮没有赢牌 q1.head++; //小哼已经打出一张牌,所以要把打出的牌出队 s.top++; s.data[s.top]=t; //再把打出的牌放到桌上,即入栈 book[t]=1; //标记桌上现在已经有牌面为t的牌 } else { //小哼此轮可以赢牌 q1.head++;//小哼已经打出一张牌,所以要把打出的牌出队 q1.data[q1.tail]=t;//紧接着把打出的牌放到手中牌的末尾 q1.tail++; while(s.data[s.top]!=t) //把桌上可以赢得的牌依次放到手中牌的末尾 { book[s.data[s.top]]=0;//取消标记 q1.data[q1.tail]=s.data[s.top];//依次放入队尾 q1.tail++; s.top--; //栈中少了一张牌,所以栈顶要减1 } } t=q2.data[q2.head]; //小哈出一张牌 //判断小哈当前打出的牌是否能赢牌 if(book[t]==0) //表明桌上没有牌面为t的牌 { //小哈此轮没有赢牌 q2.head++; //小哈已经打出一张牌,所以要把打出的牌出队 s.top++; s.data[s.top]=t; //再把打出的牌放到桌上,即入栈 book[t]=1; //标记桌上现在已经有牌面为t的牌 } else { //小哈此轮可以赢牌 q2.head++;//小哈已经打出一张牌,所以要把打出的牌出队 q2.data[q2.tail]=t;//紧接着把打出的牌放到手中牌的末尾 q2.tail++; while(s.data[s.top]!=t) //把桌上可以赢得的牌依次放到手中牌的末尾 { book[s.data[s.top]]=0;//取消标记 q2.data[q2.tail]=s.data[s.top];//依次放入队尾 q2.tail++; s.top--; } } } if(q2.head==q2.tail) { printf("小哼win\n"); printf("小哼当前手中的牌是"); for(i=q1.head;i<=q1.tail-1;i++) printf(" %d",q1.data[i]); if(s.top>0) //如果桌上有牌则依次输出桌上的牌 { printf("\n桌上的牌是"); for(i=1;i<=s.top;i++) printf(" %d",s.data[i]); } else printf("\n桌上已经没有牌了"); } else { printf("小哈win\n"); printf("小哈当前手中的牌是"); for(i=q2.head;i<=q2.tail-1;i++) printf(" %d",q2.data[i]); if(s.top>0) //如果桌上有牌则依次输出桌上的牌 { printf("\n桌上的牌是"); for(i=1;i<=s.top;i++) printf(" %d",s.data[i]); } else printf("\n桌上已经没有牌了"); } getchar();getchar(); return 0; } /* 编译 执行: [email protected]:~/Documents/Exec_important/aha/two_chapter$ ./3_cat_fishing 2 4 1 2 5 6 3 1 3 5 6 4 小哼win 小哼当前手中的牌是 5 6 2 3 1 4 6 5 桌上的牌是 2 1 3 4 */
4. 链表
以上是关于Aha code Two的主要内容,如果未能解决你的问题,请参考以下文章
优化算法人工蜂鸟优化算法(AHA)含Matlab源码 1470期
优化算法人工蜂鸟优化算法(AHA)含Matlab源码 1470期
优化算法人工蜂鸟算法(AHA)含Matlab源码 1543期