CCF 201803-02(碰撞的小球)

我的未来我决定 提交于 2020-02-29 22:12:21

题目信息:参考链接 

#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;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!