CCF 201803-02(碰撞的小球)

題目信息:參考鏈接 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//碰撞的小球 0 - L
void ball(){
    int n, L, t, i, x, y;
    int *sign;
    char *flag;
    scanf("%d %d %d", &n, &L, &t);
    flag = (char *)malloc(n);
    memset(flag, 0, n);
    sign = (int *)malloc(n * sizeof(int));
    for(i = 0; i < n; i++){
        scanf("%d", &sign[i]);
    }

    while(t){
        for(i = 0; i < n; i++){
            if(flag[i] == 0){//右移
                if(sign[i] == L){ //右端點
                    flag[i] = 1;
                    sign[i]--;
                }
                else{
                    sign[i]++;
                }
            }
            else{//左移
                if(sign[i] == 0){ //左端點
                    flag[i] = 0;
                    sign[i]++;
                }
                else{
                    sign[i]--;
                }
            }
        }
        //碰撞檢測
        for(x = 0; x < n - 1; x++){
            for(y = x + 1; y < n; y++){
                if(sign[x] == sign[y]){
                    if(flag[x] == 0){
                        flag[x] = 1;
                        flag[y] = 0;
                    }
                    else{
                        flag[y] = 1;
                        flag[x] = 0;
                    }
                }
            }
        }
        t--;
    }
    for(i = 0; i < n; i++){
        printf("%d ", sign[i]);
    }

}
int main(){
ball();
return 0;
}

 

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