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