题目:http://poj.org/problem?id=1472

  这个题目是分到“模拟题”一类的,我觉得模拟的成分比较少,主要考察编程能力。独立写完这个题特别兴奋。。。所以我必须好好说一说,独家哦。。。

  题意是计算一段伪代码的时间复杂度,整体代码夹在“BEGIN”和“END”之间,中间有很多循环语句,夹在“LOOP X”和“END”之间,表示循环X次。第一眼一看很难下手,其实只要想到一点这个题就非常水了:

  “BEGIN”语句可以看做”LOOP 1“。

  这样的话整个程序的递归结构就明显了,就是LOOP调用LOOP,直接写个LOOP函数就是了。。

  不过这个题除去恶心到死的输出格式,还是有值得注意的地方的,比如递归过程中申请的临时空间是不方便传回的,而且函数结束后这些空间没法free掉,所以我们需要先申请空间,然后传入下一次递归,这样等下一次递归结束以后方便我们free掉,不然工程编码时就造成内存泄露了,不过对于ACM来说无所谓了。。。

  最后说一下输出格式,系数大于一才输出系数,指数大于1才输出指数,要注意认真处理系数和指数是1和0的时候。还有注意输出0的情况,因为这个错了好久。

  第一次写这么多题解。。最后是代码:

  

 #include <stdio.h>
#include <string.h>
#include <stdlib.h> //循环lpNum次,结果存入ans
void loop(int *ans, char *lpNum)
{
char s[], loopNum[] = {};
while(scanf("%s", s) && s[] != 'E')
{
if(s[] == 'L')
{
//注意先申请tmp数组再递归,不要在递归的时候申请
//最好动态申请,便于释放,其他地方也是
//int tmp[11] = {0};
int *tmp = new int[];
memset(tmp, , *sizeof(int)); scanf("%s", loopNum);
loop(tmp, loopNum);
for(int i = ; i <= ; i++)
ans[i] += tmp[i]; //调用结束后释放,最近在学习写工程。。
//delete tmp;
}
else if(s[] == 'O')
{
int x;
scanf("%d", &x);
ans[] += x;
}
}
if(lpNum[] == 'n')
{
for(int i = ; i > ; i--)
ans[i] = ans[i-];
ans[] = ;
}
else
{
int x = atoi(lpNum);
for(int i = ; i <= ; i++)
ans[i] *= x;
}
} int main()
{
int t;
int ans[];
scanf("%d", &t);
for(int item = ; item <= t; item++)
{
memset(ans, , sizeof(ans));
scanf("%*s");
loop(ans, ""); //下面全是输出格式,不要看了,眼花。。
printf("Program #%d\nRuntime = ", item);
bool first = ;
for(int i = ; i >= ; i--)
{
if(ans[i] == )continue;
if(i == )printf("%s%d", first ? "" : "+", ans[]);
else if(ans[i] == )
printf("%sn", first ? "" : "+");
else if(ans[i] > )
printf("%s%d*n", first ? "" : "+", ans[i]);
if(i > )printf("^%d", i);
first = ;
}
if(first)printf("");
printf("\n\n");
}
return ;
}

OOOOOO

POJ 1472 Instant Complexity 应该叫它编程题。。的更多相关文章

  1. POJ 1472:Instant Complexity 模拟时间复杂度

    Instant Complexity Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1908   Accepted: 658 ...

  2. Instant Complexity - POJ1472

    Instant Complexity Time Limit: 1000MS Memory Limit: 10000K Description Analyzing the run-time comple ...

  3. POJ C++程序设计 编程题#1 编程作业—STL1

    编程题#1 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 下面的程序输出结 ...

  4. POJ C++程序设计 编程题#4 字符串操作

    编程题#4: 字符串操作 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 给 ...

  5. POJ C++程序设计 编程题#3 编程作业—文件操作与模板

    编程题#3: 整数的输出格式 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 利 ...

  6. POJ C++程序设计 编程题#2 编程作业—文件操作与模板

    编程题#2: 实数的输出格式 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 ...

  7. POJ C++程序设计 编程题#1 编程作业—文件操作与模板

    编程题#1 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 实现一个三维数组 ...

  8. POJ C++程序设计 编程题#3 编程作业—多态与虚函数

    编程题 #3 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 下面的程序输出 ...

  9. POJ C++程序设计 编程题#2 编程作业—多态与虚函数

    编程题#2 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 下面程序的输出结果 ...

随机推荐

  1. 【转】Android 最火的快速开发框架XUtils

    原文:http://blog.csdn.net/rain_butterfly/article/details/37812371 最近搜了一些框架供初学者学习,比较了一下XUtils是目前git上比较活 ...

  2. 基于XMPP协议的aSmack源码分析

    在研究如何实现Pushing功能期间,收集了很多关于Pushing的资料,其中有一个androidnp开源项目用的人比较多,但是由于长时间没有什么人去维护,听说bug的几率挺多的,为了以后自己的产品稳 ...

  3. Openstack中间DVR Part1 -- 东西走向的交通处理

    作者:Liping Mao  发表于:2014-07-04 版权声明:能够随意转载.转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 在Openstack中L3router会造成流量集中 ...

  4. Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解

    前言:  虽然本文标题的有点标题党的感觉,但无论如何,通过这篇文章的学习以及你自己的实践认知,写个简单的滑屏小 Demo还是just so so的. 友情提示: 在继续往下面读之前,希望您对以下知识点 ...

  5. LINUX 内核月报 taobao

    http://kernel.taobao.org/index.php?title=Monthly_Kernel_Reports

  6. shared_ptr与weak_ptr的例子

    12.20 编写程序,逐行读入一个输入文件,将内容存入一个StrBlob中,用一个StrBlobPtr打印出StrBlob的每个元素. StrBlob.h #ifndef STRBLOB_H #def ...

  7. [转] 如何在 Ubuntu 14.04 上通过 apt-get 安装 Apache Tomcat 7

    PS:war 部署路径:/var/lib/tomcat7/webapps http://www.linfuyan.com/how-to-install-apache-tomcat7-on-ubuntu ...

  8. Ubuntu上VNC 配置

    Ubuntu下VNC配置文章分类:操作系统通过将服务器配置成VNC SERVER,可以让其他主机使用图形方式登录这台服务器. 在ubuntu下配置vnc server很简单,方法如下: 服务器端: 1 ...

  9. E: Sub-process /usr/bin/dpkg returned an error code (1)

    E: Sub-process /usr/bin/dpkg returned an error code (1) 错误描述 dpkg: error processing archive /var/cac ...

  10. Clean Code 笔记 (一):命名

    一.命名规范1.名副其实,通过名称我们知道它为什么存在,它做什么事,该怎么用2.避免误导,避免使用与本意相悖的词,提防使用不同之处较小的名称3.有意义的区分,去掉多余的废话比如:a,the.缺少明确约 ...