大周總結+題解~~~

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

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