当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 面试题目:猫吃老鼠问题的求解
| 面试题目:猫吃老鼠问题的求解
#include "stdafx.h"#include <iostream.h>int main(int argc, char* argv[]){ cout<<"请输入老鼠数:"; int itotal; //老鼠总数 cin>>itotal; int iyu=itotal; //剩下未吃的老鼠数 int ipoint=0; //移动指针 //指示猫的当前位置 int ijian=1; //间隔标志 //1表示已经间隔了一个老鼠,0表示未间隔 int * ipArray; //数组指针 if(iyu<1) { cout<<"老鼠数不能小于1!"<<endl; return 0; } if(iyu==1) //如果只有一只老鼠,则直接输出返回 { cout<<" "<<ipoint+1<<endl; cout<<"结束!"<<endl; return 0; } cout<<"共"<<itotal<<"个老鼠!"<<endl; cout<<"以下是吃老鼠的顺序输出:"<<endl; ipArray=new int[iyu]; //生成数组 for(int i=0;i<iyu;i++) //初始全部位置都有老鼠存在 { ipArray[i]=1; //1表示该位置存在老鼠 } for(;;) //循环开始,依次隔一个吃老鼠,直到只剩下最后一只老鼠,输出并程序结束 { ipoint=ipoint%itotal; //确保在数组范围内 if(iyu==1) //只剩最后一只的老鼠,直接找出即可 { if((ipArray[ipoint]==1)) //碰到老鼠 { cout<<" "<<(ipoint+1)<<endl; cout<<"结束!"<<endl; return 0; } } else { if((ipArray[ipoint]==1)) //碰到老鼠 { if(ijian==1) //如果已跳过一个老鼠,则现在就可以吃 { cout<<" "<<(ipoint+1)<<endl; //输出吃掉的老鼠号 ipArray[ipoint]=0; //条件满足则吃老鼠,置该位为0; ijian=0; //置间隔标志为0; iyu--; //剩下要吃的老鼠数减一 } else //如果刚吃过一个老鼠 { ijian=1; //设置间隔标志为1 } } } ipoint++; //移动猫的位置 }//endfor return 0;} 四、结束语本文只是给出了一个初级的求解方法,描述的求解算法在存储空间和运行效率方面不是很好,存储复杂度为O(n),而时间复杂度约为O(n*n),期待有更好的算法提出! |
评论 (0) All