动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息



本月文章推荐
.如何去掉MDI子窗体的标题栏.
.在RichEdit中实现超链接.
.在vc++系统中编译和运行c语言.
.C++/CLI中有效使用非托管并列缓存.
.自定义控件(模板+数据绑定).
.C语言初学者入门讲座 第十二讲 结.
.C++ SDK+Symbian开发入门之应用程.
.服务器与客户机互传消息.
.灵活运用c语言实现高级功能.
.读取注册表中一个子键下的所有子.
.如何对数据流 INSERT、APPEND.
.VC++实现混合静态分裂视窗的方法.
.C++习题与解析(类和对象-02).
.C++语言的VxD与外界通信的所有接.
.从C++到Java --理解面向对象是关.
.如何修改自定义Webpart 的标题(d.
.如何简化临时内存的分配与释放.
.控制台窗口界面的编程控制(四).
.在Visual Studio.NET中使用Cryst.
.创世纪的C++ Builder--入门例子.

恺撒的规化

发表日期:2008-3-8 |


有趣的数学问题,这是我参加学校的编程比赛时做的一个题目,拿了个三等奖,呵呵!注解比较具体!  问题描述: 亚特兰蒂斯是一块富饶漂亮的土地.恺撒大帝率领他的大军,经过了一整年的浴血奋战,终于将它纳入了罗马的版图.然而,长期的战火彻底抹去了这里的繁华,昔日的富庶之地如今一片荒凉.恺撒大帝作为一位有着雄才大略的君主,决定在战争的废墟上建起一座更为宏伟的城市.所以,在建城之前,他需要对整个城市进行规划.     亚特兰蒂斯是一块矩形平原,恺撒预备在上面修建一些建筑.为了规划方便,他将矩形划分成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)                   /* 若未打开,则显示出错      */
   {
   printf("File squares.in Not Found!");
   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! ");  /* 显示提示信息 */
}



上一篇:经典c程序100例==31--40 人气:356
下一篇:开机密码改进and带解释版 人气:199
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号