国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

愷撒的規化

2019-11-17 05:46:52
字體:
來源:轉載
供稿:網友
有趣的數學問題,這是我參加學校的編程比賽時做的一個題目,拿了個三等獎,呵呵!注解比較具體! 問題描述:亞特蘭蒂斯是一塊富饒漂亮的土地.愷撒大帝率領他的大軍,經過了一整年的浴血奮戰,終于將它納入了羅馬的版圖.然而,長期的戰火徹底抹去了這里的繁華,昔日的富庶之地如今一片荒涼.愷撒大帝作為一位有著雄才大略的君主,決定在戰爭的廢墟上建起一座更為宏偉的城市.所以,在建城之前,他需要對整個城市進行規劃.    亞特蘭蒂斯是一塊矩形平原,愷撒預備在上面修建一些建筑.為了規劃方便,他將矩形劃分成N*M格.棘手的是,部分古老的神廟殘存下來,散布在某些格子內.亞特蘭蒂斯的原住民本就十分信仰神靈,而這些經過戰火洗禮的神廟被他們視為圣物,是萬萬不能拆除的,否則將激起民憤,甚至引發暴動.愷撒深知這一點,因此,他的新建筑在選址時要避開這些神廟.    假設新的建筑物有P種規格,每種建筑物都是正方形的,占地為Ti*Ti格(1<=i<=P).愷撒想知道對于每種規格的建筑,有多少種不同的合適選址方案(一種合適的選址方案指的是在該建筑所占的正方形區域內不存在神廟).    輸入:    輸入文件第一行包含三個數,分別代表N,M,P(1<=N,M<=2000,1<=P<=1000).隨后的N行,每行有M個0或1(1表示該格為廢墟,0表示該格有神廟).接下來的P行每行有一個整數Ti(1<Ti<=max(M,N)),代表的第i種建筑物的邊長.    輸出:    輸出文件有P行,每行一個整數,每行的數代表邊長為Ti的建筑物選址方案數.樣例輸入(spuares.in):  4 4 2  1011  1111  1110  1110  2  3樣例輸出(squares.out):  5  1/*********************
  ksexe.c
  Turboc2.01下編譯通過
**********************/
#include "stdio.h"
#include "conio.h"
#include "time.h"
main()
{
  FILE *fp,*fout;                /* 定義輸入輸出文件指針     */
  int N,M,P,T[1000],Tout[1000];  /* 定義行N,列M,與規格P變量,及規格與輸出數組 */
  int count,linecount;           /* 定義計數變量與行計數變量 */
  long X,DATA_START,DATA_END,DataXPos,DataYpos,Pcount,Xpos,Ypos;  /* 定義有關的位置變量 */
  int DATA,textY;                /* 定義數據變量DATA         */
  void *tmp=0;                   /* 定義暫存指針變量         */
  clock_t start,end;             /* 定義計時變量             */
  float percent=0.0,TIME=0.0;    /* 定義完成百分比與時間變量 */
  Pcount=0;count=0;linecount=0;  /* 賦初值               */
  fp=fopen("squares.in","r");    /* 打開輸入文件       */
  if(fp==NULL)                   /* 若未打開,則顯示出錯      */
   {
      exit(1);
   }
   fscanf(fp,"%d %d %d",&N,&M,&P);         /* 讀取N,M,P                */
   DATA_START=ftell(fp)+2L;                /* 得數據起始位置DATA_START */
   printf(" N=%d,M=%d,P=%d",N,M,P);       /* 在屏幕上輸出N,M,P        */
   /* 動態分配內存             */
   /*if((T=malloc(P))==NULL)              
    {
      printf("Not enough Memory!");
      exit(1);
    } */
    fseek(fp,N*(M+2L)+2L,SEEK_CUR);        /* 文件的位置指示定位于規格起始處 */
    DATA_END=ftell(fp);                    /* 得到數據結束位置DATA_END       */
   for(count=0;count<P;count++)
    {
        fscanf(fp,"%d%*c",&T[count]);      /* 讀取規格數               */
        printf(" T=%d",T[count]);          /* 在屏幕上顯示出來         */  
        Tout[count]=0;       /* 輸出數組清零             */
    }
   fseek(fp,DATA_START,SEEK_SET);     /* 文件位置指示重新定位于數據開始 */
   printf(" ");
   textY=wherey();      /* 得當前光標位置的行標值   */
   start=clock();      /* 開始計時                 */
   for(X=DATA_START;X<DATA_END-T[0]*2L-(T[0]-1)*M-T[0]+1L;X++) /* 判定總位置指示是否大于最小規格最后一個起點方格 */
    {
         if(X>DATA_START+linecount*(M+2L)+M-T[0])       /* 判定是否超出行結束方格 */
    {
       linecount++;          /* 若超出,則行
計數器增1   */
       X=DATA_START+(M+2L)*linecount;         /* X指示為下一行開始      */
    }
  DataXpos=X;                                    /* 橫向讀取初值           */
  DataYpos=X;                                    /* 縱向讀取初值           */
     Pcount=0;                                      /* 讀取個數初值           */
  for(count=0;count<P;count++)                   /* 循環檢測各個規格的選址方案      */
     {
        for(;Pcount<T[count];Pcount++)              /* 讀取個數控制,使讀取個數逐步遞增 */
        {
   if(DataXpos>DATA_END-2LDataYpos>DATA_START+(M+2L)*(linecount+1)) /* 判定是否到達邊界 */
                       goto next1;           /* 若是則跳到next1,退出外循環   */  
               for(Xpos=DataXpos;Xpos<=DataXpos+Pcount;Xpos++)      /* 橫向循環讀取方格 */
          {
           fseek(fp,Xpos,SEEK_SET);       /* 定位于讀取方格   */
    fread(tmp,1,1,fp);        /* 讀取1個數據      */ 
    DATA=atoi(tmp);         /* 轉換為整型數字   */
    if(DATA==0)         /* 若為零,則跳到next1,退出外循環 */
                        goto next1;
          }
          for(Ypos=DataYpos;Ypos<DataYpos+Pcount*(M+2L);Ypos+=M+2L)    /* 縱向循環讀取方格 */
          {
           fseek(fp,Ypos,SEEK_SET);       /* 定位于讀取方格   */
    fread(tmp,1,1,fp);        /* 讀取1個數據      */ 
    DATA=atoi(tmp);         /* 轉換為整型數字   */
                if(DATA==0)             /* 若為零,則跳到next1,退出外循環 */
                        goto next1;
               }
               DataXpos+=M+2L;                  /* 橫向讀取起始位置指向下一個位置 */
               DataYpos++;                      /* 縱向讀取起始位置指向下一個位置 */
                }
    Tout[count]++;                         /* 若此種規格的所有方格均為1,則對應輸出值增1 */
                continue;     /* 繼續循環,跳過break句           */
                next1: break;                          /* 跳出循環,X值增1,繼續           */
              }
              gotoxy(1,textY);    /* 屏幕光標定位                   */
  end=clock();        /* 獲取計時值                     */
  percent=(X-DATA_START)/(float)(DATA_END-T[0]*2L-(T[0]-1)*M-T[0]-DATA_START);  /* 計算完成百分比 */
  TIME=(end-start)/18.2;             /* 計算用時       */
  printf("%.0f%% complished!  %02d:%02d used.  ",percent*100,(int)TIME/60,(int)TIME%60);  /* 輸出信息 */
         }
   if((fout=fopen("squares.out","a"))==NULL)             /* 創建輸出文件squares.out   */
     {
        printf("Can not create squares.out file!");      /* 若不能創建,則顯示出錯信息 */
      exit(1);
     }
   for(count=0;count<P;count++)    
   {
     printf(" T=%d: %d",T[count],Tout[count]);       /* 在屏幕上輸出結果            */
     fprintf(fout,"%d ",Tout[count]);                /* 將結果輸出到文件squares.out */
   }
   fclose(fout);         /* 關閉輸出文件 */
   fclose(fp);           /* 關閉輸入文件 */
   printf(" You can use [ type squares.out ] to view out file! ");  /* 顯示提示信息 */
}




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 禄丰县| 仪征市| 武夷山市| 五河县| 纳雍县| 陵川县| 宣武区| 垫江县| 台南市| 稻城县| 射洪县| 太原市| 浦县| 吐鲁番市| 汉源县| 仪征市| 张家界市| 三河市| 双峰县| 和龙市| 华安县| 神农架林区| 桐庐县| 潮安县| 河东区| 麦盖提县| 扎鲁特旗| 乌什县| 武安市| 浦县| 黄骅市| 平塘县| 齐河县| 阳山县| 彩票| 若羌县| 五大连池市| 喀喇| 永年县| 德安县| 玉田县|