大周总结+题解~~~

哈哈哈!!!!
这大周U盘忘记带了啊。所以题目也没存,程序也没有。幸好我有先见之明,以备不时之需。
首先,这大周的刷题量没有上大周多。
其次不会的题都挤成了一坨。
然后……
没了。^_^

一、重复关门

题目描述:

  就是n个门啦,然后服务员无聊啊,把开了的们关上,把关上的门打开。但是他们只开或关为自己编号倍数的门。(门的初始状态是关的)
  打个比方:第一个服务员经过,将所有房间门打开;第二个服务员经过将所有编号为2的倍数的房门打开的关上,关闭的打开;第三个服务员经过将所有编号为3倍数的房门打开的关上,关闭的打开。依此类推;
  问:m个服务员过后开的门有几个。

输入n,m,输出一个整数sum,表示有sum扇门 是开的。

解:

 开始我想的是双重For循环,外循环控制房间数N,内循环控制服务员的个数M。但是,我发现,我错了。因为我不会这么编啊。于是,我执行了B计划!!!!
 还是双重循环,但是外循环是For循环,内循环是While。外循环是M,内循环把M编号的房间的门做相反运动。
 所以代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m,sum=0,i,j;
    bool a[110]={};
    cin>>n>>m;
    for (i=1;i<=m;i++)
    {
        j=1;
        while (i*j<=n)
        {
            a[i*j]=!a[i*j];
            j++;
        }
    }
    for (i=1;i<=n;i++)
      if (a[i]) sum++;
    cout<<sum<<endl;
    return 0;
}

二、操作数组

题目描述

arroper.pas 给你n个数,根据相关的操作命令对数组进行操作。

数组下列操作命令 1 i (1代表输出命令,i代表要输出数组的第i个元素,) 2 i k (2代表插入命令,i和k表示要在数组第i个元素后插入数字k) 3 i (3代表删除命令,i表示删除第i个数) 4 k  (4代表查找命令,k是要查找的数,如果查找到,输出第一个查找到的数在数组的位置,如果找不到输出-1)

输入第一行一个n 表示数组有n个元素 (n<=100) 第二行为n个正整数,小于10^6 第三行为为m,表示下面有m个命令 5<=m<=10000 每行一个命令,每行的第一个数表示命令的意义,数据保证命令合法有效。

解:

在4个指令中只有1、4需要输出。其他的都只是改变数组的值而已。但是需要注意的是数组的大小。如果按照n的值开数组,只能得九十分,因为还有m条指令。假设m条指令都是插入的话,则要10110个元素。
所以代码如下

#include<bits/stdc++.h>
using namespace std;    
int n,a[11000],l,x,y;//数组最好开在主程序外
int main()
{

cin>>n;
for(int i=1;i<=n;i++)
 cin>>a[i];
cin>>l;
for(int i=1;i<=l;i++)
{
cin>>x;
if(x==1)
{
 cin>>y;
 cout<<a[y]<<endl;
}
if(x==2)
{
int s;
cin>>y>>s;
for(int j=n;j>=y+1;j--)
 a[j+1]=a[j];//将j个元素都往后挪
a[y+1]=s;//将S插入数组
n++;//元素加一
}
if(x==3)
{
cin>>y;
for(int j=y;j<n;j++)
 a[j]=a[j+1];//将a[j]删除,并把数组往前挪
n--;//数量减一
}
if(x==4)
{
cin>>y;
int m=0;
for(int j=1;j<=n;j++)
{
if(a[j]==y)
{
m++;
cout<<j<<endl;
break;
}
}
if(m==0) cout<<"-1"<<endl;
}
}
return 0;
}

本题需注意的就是数组的大小。卓嘉因为数组开小了,被堵了两节课。


最后,总结一下本大周:
因为本人在慌张和匆忙中把U盘落在家里之后,本大周的悲剧开始了。唉兮。
所以题目没打几道,考试也没几分,关键是上大周还把博客小姐给忘了。
但是,我是要好好学信奥。2017要好好学习,2018也要好好学。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章