2018CCF計算機軟體能力認證試題
阿新 • • 發佈:2018-12-30
1. 201803-1 跳一跳
問題描述
近來,跳一跳這款小遊戲風靡全國,受到不少玩家的喜愛。
簡化後的跳一跳規則如下:玩家每次從當前方塊跳到下一個方塊,如果沒有跳到下一個方塊上則遊戲結束。
如果跳到了方塊上,但沒有跳到方塊的中心則獲得1分;跳到方塊中心時,若上一次的得分為1分或這是本局遊戲的第一次跳躍則此次得分為2分,否則此次得分比上一次得分多兩分(即連續跳到方塊中心時,總得分將+2,+4,+6,+8…)。
現在給出一個人跳一跳的全過程,請你求出他本局遊戲的得分(按照題目描述的規則)。
輸入格式
輸入包含多個數字,用空格分隔,每個數字都是1,2,0之一,1表示此次跳躍跳到了方塊上但是沒有跳到中心,2表示此次跳躍跳到了方塊上並且跳到了方塊中心,0表示此次跳躍沒有跳到方塊上(此時遊戲結束)。
輸出格式
輸出一個整數,為本局遊戲的得分(在本題的規則下)。
樣例輸入
1 1 2 2 2 1 1 2 2 0
樣例輸出
22
資料規模和約定
對於所有評測用例,輸入的數字不超過30個,保證0正好出現一次且為最後一個數字。
#include <iostream>
using namespace std;
int main()
{
int a[30];
int i = 0;
/*此處之所以 先提取了第一個 是因為 cin.get()會把第一個數字給吃了(除非第一個
數字前有空格)*/
cin >> a[i];
i++;
//cin.get() 可以提取出 空格 tab 回車
while (cin.get() != '\n'&&i<30)
{
cin >> a[i];
i++;
}
i = 0 ;
int num = 0;
int count = 0;//count的作用在於多次跳到中心的累加值
while (i <= sizeof(a)) {
if (a[i] != 0) {
if (a[i] == 1) {
num = num + 1;
count = 0;
}
else if (a[i] == 2) {
count = count + 2;
num = num + count;
}
}
else {
count = 0;
break;
}
i++;
}
cout << num;
}
輸出結果
網上的簡便方法
#include <iostream>
using namespace std;
int main(){
int a,count=0,s=0;
while(cin>>a){
if(a==0)
break;
else{
if(a==2){
count++;
s+=count*a;
}
if(a==1){
count=0;
s+=a;
}
}
}
cout<<s<<endl;
return 0;
}
- 201803-2 碰撞的小球
問題描述
數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。
當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小仍然為原來大小。
當兩個小球撞到一起的時候,兩個小球會分別向與自己原來移動的方向相反的方向,以原來的速度大小繼續移動。
現在,告訴你線段的長度L,小球數量n,以及n個小球的初始位置,請你計算t秒之後,各個小球的位置。
提示
因為所有小球的初始位置都為偶數,而且線段的長度為偶數,可以證明,不會有三個小球同時相撞,小球到達線段端點以及小球之間的碰撞時刻均為整數。
同時也可以證明兩個小球發生碰撞的位置一定是整數(但不一定是偶數)。
輸入格式
輸入的第一行包含三個整數n, L, t,用空格分隔,分別表示小球的個數、線段長度和你需要計算t秒之後小球的位置。
第二行包含n個整數a1, a2, …, an,用空格分隔,表示初始時刻n個小球的位置。
輸出格式
輸出一行包含n個整數,用空格分隔,第i個整數代表初始時刻位於ai的小球,在t秒之後的位置。
樣例輸入
3 10 5
4 6 8
樣例輸出
7 9 9
樣例輸入
10 22 30
14 12 16 6 10 2 8 20 18 4
樣例輸出
6 6 8 2 4 0 4 12 10 2
資料規模和約定
對於所有評測用例,1 ≤ n ≤ 100,1 ≤ t ≤ 100,2 ≤ L ≤ 1000,0 < ai < L。L為偶數。
保證所有小球的初始位置互不相同且均為偶數。
//該程式碼存在錯誤 得分為10的版本 結果6 6 8 2 4 0 4 12 10 2 但是這個程式碼執行結果中的各個數字
//位置不同
#include <iostream>
using namespace std;
int main()
{
int n = 1, L, t;
cin >> n >> L >> t;
int a[100];
cin >> a[0];
int c[100];
for (int i2 = 0; i2<n; i2++)
{
c[i2] = 1;
}
int i = 1, i1 = 1;
while (cin.get() != '\n'&&i<n)
{
cin >> a[i];
i++;
}
while (i1 <= t)
{
for (int i3 = 0; i3<n; i3++)
{
if (c[i3] == 1)
{
if (a[i3] <= (L - 2)) {
a[i3] = a[i3] + 1;
}else if (a[i3] == (L - 1) && c[i3] == 1) {
a[i3] = a[i3] + 1;
c[i3] = -c[i3];
}
}else {
if (a[i3] >= 2) {
a[i3] = a[i3] - 1;
}
else if (a[i3] == 1 && c[i3] == -1) {
a[i3] = a[i3] - 1;
c[i3] = -c[i3];
}
}
if (a[i3] == a[i3 - 1] && c[i3] != c[i3 - 1]) {
c[i3] = -c[i3];
c[i3 - 1] = -c[i3 - 1];
}
else if (a[i3] == a[i3 + 1] && c[i3] != c[i3 + 1]) {
c[i3] = -c[i3];
c[i3 + 1] = -c[i3 + 1];
}
}
i1++;
}
int i4 = 0;
while (i4<n) {
cout << a[i4] << " ";
i4++;
}
}