|
面试题目:猫吃老鼠问题的求解
#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),期待有更好的算法提出! |
背景:
阅读新闻
面试题目:猫吃老鼠问题的求解
| [日期:2005-12-30] | 作者: | [字体:大 中 小] |
阅读: 次
【 打印 】
【 打印 】
相关新闻
相关关键词:
全站导航
一、问题描述
gmail.com