哈哈哈!!!!
这大周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也要好好学。