首页 新闻 搜索 专区 学院

杭电2030题

0
悬赏园豆:10 [已解决问题] 解决于 2012-09-22 21:49
#include <cstdlib>
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
    int d,len,n;
    char str[100];
    getchar();
    cin>>n;
    while(n--)
    {
      d=0;
      gets(str);
      len=strlen(str);
      //cout<<"len="<<len<<endl;
      for(int i=0;i<len;i++)
      {
        if(str[i]<0)
          d++;
      }
      cout<<d/2<<endl;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

我的代码为什么超时呢?我对超时不太了解,超时有哪几种原因引起?能否总结一下,请大家赐教哈,在原有的代码基础上修改,谢谢啦!

问题链接http://acm.hdu.edu.cn/showproblem.php?pid=2030

Marshalkk的主页 Marshalkk | 初学一级 | 园豆:183
提问于:2012-07-30 15:16
< >
分享
最佳答案
1
#include <cstdlib>
#include <stdio.h>
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
    int d,len,n;
    int k=0;
    char str[10000];
    cin>>n;
    cin.ignore();
    
    int *countArray=(int*)malloc(n*sizeof(int));
    while(n--)
    {
      d=0;
      gets(str);
      len=strlen(str);
      //cout<<"len="<<len<<endl;
      for(int i=0;i<len;i++)
      {
        if(str[i]<0)
          d++;
      }
    //  cout<<d/2<<endl;
     countArray[k]=(int)d/2;
     k++;
    }
    for(int j=0;j<k;j++)
    {
     cout<<countArray[j]<<endl;
    }

    getchar();
    return 0;
    
}

修改成这个应该可以

收获园豆:10
風吹云动 | 初学一级 |园豆:69 | 2012-07-31 17:14

请问一下,为什么我的会超时呢?

Marshalkk | 园豆:183 (初学一级) | 2012-08-06 10:21

@Marshalkk: 

是这两个函数的问题  
getchar();
cin
>>n;
你的n其实没有获取到值
具体你可以用断点调试。就会发现

風吹云动 | 园豆:69 (初学一级) | 2012-08-06 13:43

是刚开始AC哈谢谢啦

Marshalkk | 园豆:183 (初学一级) | 2012-09-22 21:45

是刚开始AC哈谢谢啦

Marshalkk | 园豆:183 (初学一级) | 2012-09-22 21:48
其他回答(1)
1

超时的原因其实是这样的。  你最后不能加上

system("PAUSE");
其实这句话是让界面停止在DOS界面的语句。它是让系统停止。。你加上它自然就会超时啊。 你应该是刚开始ACM吧 。
其实最后的两句话都可以不要。return 0; 就行了!
Amazing_Y | 园豆:204 (菜鸟二级) | 2012-08-31 20:55

是刚开始AC哈谢谢啦

支持(0) 反对(0) Marshalkk | 园豆:183 (初学一级) | 2012-09-22 21:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册