1. 程式人生 > >201803-2 試題名稱: 碰撞的小球

201803-2 試題名稱: 碰撞的小球

#include <stdio.h>
 int main()
 {
 	
 	int n, L, t;
 	scanf("%d %d %d",&n, &L, &t);
 	struct ball
 	{
 		int number;//小球位置
 		int pre;//前一秒的位置 
 		int flag;//0向右移動, 1 向左移動 
	 }ball[n];
	 
 	int i;
 	for(i = 0; i < n; i++)
 	{
 		scanf("%d",&ball[i].number);//輸入小球的位置 
	 }
 	int j, k, m;
 	
	//第一次移動小球 
	for(j = 0; j < n; j++)
	{
		 if(ball[j].number == L)//判斷小球是否到達端點 
		 {
		 	ball[j].flag = 1;
		 }
		 else
		 {
		 	ball[j].flag = 0;
		 }
		 
		ball[j].pre = ball[j].number;
		if(ball[j].flag == 1)
		{		
			ball[j].number -= 1;
		 }
		 else
		 {
		 	ball[j].number += 1;
		 }
	}
//	for(i = 0; i < n; i++)
//	{
//		printf("%d ",ball[i].number);
//	}
	int q;
 	for(i = 1; i < t; i++)//每秒過去 
 	{
 		for(k = 0; k < n-1; k++)//判斷小球是否相撞 
		{
			for(m = k+1; m < n; m++)
			{
				if(ball[k].number == ball[m].number)
				{
					if (ball[k].pre > ball[m].pre)//判斷碰撞後移動的方向 
					{
						ball[k].flag = 0;
						ball[m].flag = 1;
					}
					else
					{
						ball[k].flag = 1;
						ball[m].flag = 0;
					}
				}
					
			 }
			  
		 }
		 for(q = 0; q < n; q++)
		 {
		 	if(ball[q].number == 0)//判斷小球是否到達端點 
			 {
			 	ball[q].flag = 0;
			 }
			 else if(ball[q].number == L) 
			 {
			 	ball[q].flag = 1;
			 }
		 }
		 
		
 		for(j = 0; j < n; j++)//移動小球 
 		{
 			ball[j].pre = ball[j].number;
 			if(ball[j].flag == 1)
 			{		
 				ball[j].number -= 1;
			 }
			 else
			 {
			 	ball[j].number += 1;
			 }
			
		 }
		 
//		 for(q = 0; q < n; q++)
//		{
//			printf("%d ",ball[q].number);
//			printf("\n");
//		}
		 
	}
	for(i = 0; i < n; i++)
	{
		printf("%d ",ball[i].number);
	}
	
	return 0;
 }

相關推薦

201803-2 試題名稱 碰撞小球 java實現

問題描述 數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。   當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小仍然為原來大小。

201803-2 試題名稱 碰撞小球

#include <stdio.h> int main() { int n, L, t; scanf("%d %d %d",&n, &L, &t); struct ball { int number;//小球

201803-1 試題名稱 跳一跳

#include <stdio.h> int main() { int i, sum, j; sum = 0; scanf("%d",&i); if( i == 1) sum++; else if ( i == 2) sum +=

201604-2 試題名稱 俄羅斯方塊

#include <stdio.h> int main() { int matrix[15][10]; int graphic[4][4]; int i, j, k; for(i=0; i<15; i++) { for(j=0; j<1

201809-2 試題名稱 買菜 java實現

問題描述 小H和小W來到了一條街上,兩人分開買菜,他們買菜的過程可以描述為,去店裡買一些菜然後去旁邊的一個廣場把菜裝上車,兩人都要買n種菜,所以也都要裝n次車。具體的,對於小H來說有n個不相交的時間段[a1,b1],[a2,b2]…[an,bn]在裝車,對於小W

試題編號 201809-2 試題名稱 買菜

今天學校組織CCF培訓,因為學校畢業需要什麼分,要150分以上才行,雖然我200分過了,不過誰不想在高一些呢?反正學校給兩次免費認證的機會。 以下程式碼為海賊科技——胡船長培訓所給程式碼(我認證時寫的太麻煩了·····真的對演算法好的人好生羨慕,我的程式碼就不拿

201503-2 試題名稱 數字排序

#include <stdio.h> int main() { int n; scanf("%d",&n); int a[1001]; int k; int i, j; for(i=0; i<1001; i++) { a[i

CCF CSP 程式設計題目和解答-----試題名稱Z字形掃描-------201412-2

問題描述 試題編號: 201412-2 試題名稱: Z字形掃描 時間限制: 2.0s 記憶體限制: 256.0MB 問題描述: 問題描述   在影象編碼的演算法中,需要將一個給

CCF CSP 程式設計題目和解答-----試題名稱畫圖-------201409-2

問題描述 試題編號: 201409-2 試題名稱: 畫圖 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述   在一個定義了直角座標系的紙上,畫一個(x

201809-1 試題名稱 賣菜 java實現

問題描述 在一條街上有n個賣菜的商店,按1至n的順序排成一排,這些商店都賣一種蔬菜。   第一天,每個商店都自己定了一個價格。店主們希望自己的菜價和其他商店的一致,第二天,每一家商店都會根據他自己和相鄰商店的價格調整自己的價格。具體的,每家商店都會將第二天的菜價

201712-1 試題名稱 最小差值 java實現

問題描述 給定n個數,請找出其中相差(差的絕對值)最小的兩個數,輸出它們的差值的絕對值。 輸入格式 輸入第一行包含一個整數n。   第二行包含n個正整數,相鄰整數之間使用一個空格分隔。 輸出格式 輸出一個整數,表示答案。 樣例輸入 5 1 5 4 8 20 樣例

CCF CSP 程式設計題目和解答-----試題名稱路徑解析 -------201604-3

  在作業系統中,資料通常以檔案的形式儲存在檔案系統中。檔案系統一般採用層次化的組織形式,由目錄(或者資料夾)和檔案構成,形成一棵樹的形狀。檔案有內容,用於儲存資料。目錄是容器,可包含檔案或其他目錄。同一個目錄下的所有檔案和目錄的名字各不相同,不同目錄下可以有名字相同的檔案或目錄。   為了指定檔案系統中的某

試題編號 201809-1 試題名稱 賣菜

就是這樣····第一題沒啥說的 #include<stdio.h> int a[1001]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) s

CCF CSP 程式設計題目和解答-----試題名稱爐石傳說 -------201609-3

#include<iostream> #include<algorithm> #include<vector> #include<string> using namespace std; bool endgame = false;//遊戲是否結束的標誌位

201803-2 CCF-CSP模擬試題 碰撞小球

import java.util.Scanner; public class Main { public static void main(String[] args){ int[] pos = new int[100]; int i

CCF模擬試題 201803-2 碰撞小球

試題編號:201803-2試題名稱:碰撞的小球時間限制:1.0s記憶體限制:256.0MB問題描述:問題描述  數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單

CCF認證201803-2 碰撞小球 java程式碼實現。

問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。   當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小仍然為原來大小。   當兩個小

CCF Python題解(100分)201803-2 碰撞小球

CCF Python題解(100分)201803-2 碰撞的小球 from collections import defaultdict n, L, t = map(int,input().split()) positions = map(int,input().split()) li

CCF 201803-2 碰撞小球-Python版

問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。   當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小

CCF 201803-2 碰撞小球

剛開始挺沒有思路的,後來在網上看了別人的程式碼,學習了,原作者看到了聯絡我,侵刪。 思路:小球的位置和方向分別用兩個陣列表示,方向向右為正,向左為負,每秒小球位置的變化可用 a[i]+=b[i](陣列a表示小球的位置,陣列b表示小球運動的方向),到達兩端後