本人的人工智能作业,贴在这里,仅供交流,如果有疑问欢迎联系。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define WIN 65535
- int money[1024];
- int divide(int n,int num)
- {
- int i,j,k,flag=0,p=0,q=0,max=0;
- for ( i = 0; i < n; i++)
- {
- if (money[i] > 2) //如果钱币数目小于2,不可再分
- {
- flag=1;
- max=0;
- for (j = 1; j < (money[i]+1)/2; j++)
- {
- for ( k = n; k > i+1; k--)//将钱币分为两堆
- {
- money[k]=money[k-1];
- }
- money[i+1]=money[i]-j;
- money[i]=j;
- if (divide(n+1,num+1) > max)//分为两堆后,继续让对手分
- {
- max=divide(n+1,num+1);//记录分后的最好结果
- p=i;
- q=j;
- }
- money[i]+=money[i+1];//还原分堆
- for ( k = i+1; k < n+1; k++)
- {
- money[k]=money[k+1];
- }
- }
- }
- }
- if (num == 0)//找到最好的结果,按此分堆
- {
- for ( k = n; k > p+1; k--)
- {
- money[k]=money[k-1];
- }
- money[p+1]=money[p]-q;
- money[p]=q;
- }
- if (flag == 0)//如果不能再分,则获胜
- {
- return WIN;
- }
- else
- {
- return max;
- }
- }
- int main()
- {
- int i,n,flag=0;
- scanf("%d",&n);
- memset(money,0,sizeof(money));
- money[0]=n;
- i=1;
- while(1)
- {
- for ( i = 0; ; i++)//输入分堆方案
- {
- scanf("%d",&money[i]);
- if (money[i] == 0)
- {
- break;
- }
- }
- flag=0;
- for ( i = 0;money[i] != 0; i++)
- {
- if (money[i] > 2)
- {
- flag=1;
- }
- }
- if (flag == 0)//判断结果
- {
- printf("Computer Lost!\n");
- break;
- }
- divide(i,0);//电脑分堆
- flag=0;
- for ( i = 0;money[i] != 0; i++)//输出电脑分堆结果
- {
- printf("%d ",money[i]);
- if (money[i] > 2)
- {
- flag=1;
- }
- }
- printf("\n");
- if (flag == 0)//判断结果
- {
- printf("You Lost!\n");
- break;
- }
- }
- system("PAUSE");
- return 0;
- }
本文出自 “天才鸟蛋” 博客,请务必保留此出处http://curley.blog.51cto.com/1627940/497959