程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 木桿上的螞蟻問題

木桿上的螞蟻問題

編輯:關於C語言

有一根27厘米的細木桿,在第3厘米、7厘米、 11厘米、17厘米、23厘米這五個位置上各有一只螞蟻。
木桿很細,不能同時通過一只螞蟻。開始時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,
但不會後退。當任意兩只螞蟻碰頭時,兩只螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一厘米的距離。
求所有螞蟻都離開木桿的最小時間和最大時間。

輸入木桿長度 L
輸入螞蟻的個數 n
輸入每個螞蟻在木桿上的位置 x1,x2……xn
輸出所有螞蟻離開木桿的最小時間和最大時間
下面是我解題的方法
 
/* 
gcc test.c -o test 
./test 27 5 3,7,11,17,23 
 
假設只有兩只螞蟻A,B 
A在第3厘米a處,B在第7厘米b處 
 
 
若是A,B相向而行,如 
0   3   5  7                                                 27  
+---+---+--+-------------------------------------------------+ 
x   a   o  b                                                 y 
    A->  <-B 
 
則A,B在第5厘米o處相遇後,同時調頭朝反方向走 
則A走過的路程為ao+ox=7 
則B走過的路程為bo+oy=20 
則A+B=ao+ox+bo+oy=(ao+oy)+(bo+ox)=ay+bx 
發現 
在任意兩只螞蟻碰頭時,兩只螞蟻會同時調頭朝反方向走情況下走過的總路程=在任意兩只螞蟻碰頭時,兩只螞蟻會交換位置不轉向往前走情況下走過的總路程 
因此在計算最大最小時間時,可以忽略 
任意兩只螞蟻碰頭時,兩只螞蟻會同時調頭朝反方向走的條件 
時間最短時,A往離她最近的那頭走,就是3,B往離她最近的那頭走,就是7 
時間最多時,A往離她最遠的那頭走,就是27-3,B往離她最遠的那頭走,就是27-7 
 
當螞蟻為n時,時間最短時,所有螞蟻都離她最近的那頭走,取出路程最大的那只螞蟻,一般是中間那只 
當螞蟻為n時,時間最多時,所有螞蟻都離她最遠的那頭走,取出路程最大的那只螞蟻,一般是最靠近兩頭那只 
 
*系統環境:windows/linux 
*編譯環境:gcc/vc++ 6.0 
*輸入參數:多個參數時空格分隔 
                    參數1是一組數字 
                    參數2是一個數字 
                    參數3是一組數字,中間用逗號分割 
                    例如格式:27 5 3,7,11,17,23 
*/
#include<ctype.h> 
#include<string.h> 
#include<stdlib.h> 
#include<stdio.h> 
int max(int a,int b) 

    return a > b? a:b;   

int min(int a,int b) 

    return a > b? b:a;   

int main(int argc, char** argv) 

    int L=0; 
    int n=0; 
    int speed=1; 
    char *p; 
    char *beakChar=","; 
    int minTime=0; 
    int maxTime=0; 
    if(argc!=4) 
    { 
        printf("params number must equal 4");    
    } 
    L=atoi(argv[1]); 
    n=atoi(argv[2]); 
    strtok(argv[3],beakChar); 
    while((p=strtok(NULL,beakChar))) 
    { 
        int position=atoi(p); 
        minTime=max(minTime,min(position,L-position)); 
        maxTime=max(maxTime,max(position,L-position)); 
    } 
    printf("min time:%ds,max time:%ds\n",minTime,maxTime); 

 
 
本文出自 “一方有” 博客

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved