⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 no_3.cpp

📁 我们acm的一道题
💻 CPP
字号:
/*此题的重点不是在程序的实现上,而是在将问题数学化,也就是说在什么情况下
  一、k=3*1; 先拿者(猫老大)一定能胜利,我们得用一个数学归纳法来解决这个问题:
      (1)如果这儿只1块金子,那么先拿者(猫老大)一定胜利,最小值为1;
	  (2)当有2块金子,那么先拿者一定(猫老大)胜利,最小值为2;
	  (3)当有3块金子时,先拿者(猫老大)一定失败!!!

  以上面的情况经验证,是正确的,我们以此为基础继续往下推:
   二、 k=3*2;   (4)如果这儿有4块金子,那么先拿者(猫老大)一定胜利,最小值为1,则就剩下3块,
	      那么,现在对于3块的先拿者便是最开始的后拿来者。
		(5)如果这儿有5块金子,那么先拿者(猫老大)一定胜利,最小值为5,则就剩下3块,
	      那么,现在对于3块的先拿者(猫老大)便是最开始的后拿来者。
         (6) 当有6块金子时,先拿者(猫老大)一定失败!!!

  …………………………………………

    k=3*n时,同样有上式,
	我们设有(a)当有3*n块金子时,先拿者(猫老大)一定失败!!
	         (b) 当有3*n+1块金子,那么先拿者(猫老大)一定胜利,最小值为1;
			 (c) 当有3*n+2块金子,那么先拿者(猫老大)一定胜利,最小值为2;

  从而得证当输入数再模上3,得到1,2时就是先拿者(猫老大)胜利;0时就是KING
  胜利;
  */

#include <stdio.h>
#include <string.h>       
#include "stdafx.h"
#define Max 10000
char  b[Max];
int a[Max];
void main()
{

 int j,len;a[0]=0;
 scanf("%s",&b);
 while(1){
 len=strlen(b);
 for(j=0;j<len;j++)
   {
     a[j]=(int)b[j]-48+a[j];
	 a[j]=a[j]%3;
     a[j+1]=10*a[j];
  }
 
 if(a[j-1]==0) 
 printf("King will win.\n");
 else {printf("MaoLaoDa will win.\n%d\n",a[j-1]);}
 scanf("%s",&b);a[0]=0;
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -