有关于数组的例题

有关于数组的例题
一、
宾馆里有一百个房间,从1-100编了号。第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是2的倍数的房间“相反处理”,第三个服务员把所有编号是3的倍数的房间作“相反处理”…,以后每个服务员都是如此。当第100个服务员来过后,哪几扇门是打开的。(所谓“相反处理”是:原来开着的门关上,原来关上的门打开。)
【分析】此题较简单,用a[1],a[2],…,a[n]表示编号为1,2,3,…,n的门是否开着。模拟这些操作即可。

#include
#include
#define MAXN 100+10
int a[MAXN];
int main()
{
	int n,k,first=1;
	memset(a,0,sizeof(a));
              for (int i=1;i<=100;++i)
	     for (int j=1;j<=100;++j)
	        if (j%i==0) a[j]=!a[j];
for (int i=1;i<=100;++i)
      if (a[i])
      {
        	 if(first) first=0; 
                     else printf(" ");
               printf("%d",i);  
      }
printf("\n");
return 0;	
}

【说明】:
memset(a,0,sizeof(a))的作用是把数组a清零,它在cstring中定义。虽然也能用for循环完成相同的任务,但是用memset又方便又快捷。
二、
约瑟夫问题:N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈;…输出依次出圈的人的编号。N,M由键盘输入。
【分析】
(1)由于对于每个人只有出圈和没有圈两种状态,因此可以用布尔型标志数组存储游戏过程中每个人的状态。不妨用true表示出圈,false 表示没有出圈。
(2)开始的时候,给标志数组赋初值为false,即全部在圈内。
(3)模拟报数游戏的过程,直到所有的人出圈为止。

#include
using namespace std;
int n,m,s,f,t;
bool a[101];		//根据题意开出数组大小
int main()
{
    cin>>n>>m;		//共n人,报到m出圈
    cout<

三、
输入一串字符,字符个数不超过100,且以“.”结束。 判断它们是否构成回文。
【分析】所谓回文指从左到右和从右到左读一串字符的值是一样的,如12321,ABCBA,AA等。先读入要判断的一串字符(放入数组letter中),并记住这串字符的长度,然后首尾字符比较,并不断向中间靠拢,就可以判断出是否为回文。

#include
using namespace std;
int main()
{   
    char ch,letter[101];
    int i=0,;
    cin>>ch;
    while (ch!='.') 	//读入一个字符串以'.'号结束
    {
      ++i;
      letter[i]=ch;
      cin>>ch;
    }
    j=1;
    while ((j=i) cout<<"Yes"<

你可能感兴趣的:(例题)