杭电2030汉字统计(已解决)

#include "stdio.h"

int main(int argc, char* argv[])
{
    int index,sum;
    char c;
    scanf("%d",&index);
    getchar();
    while (index--)
    {
        sum =0 ;
        while ( (c= getchar())!= '\n')
        {
            if (c < 0 )
                sum++;
        }
        printf("%d\n",sum/2);
    }
    return 0;
}

 

以上是转的别人的代码!可以AC过去!

 

 

 

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

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

 

上面这段是我自己的代码!为什么会超时呢?通过这几天的做题,我发现自己弄不懂为什么会超时?继续努力,争取解决超时问题,有能力的话,总结一下超时的原因!请大家多多帮忙。谢谢啦~

另外,还有一事不明白,求解汉子个数时的条件为什么是“str[i]<0”?

小结:(出自:http://hi.baidu.com/gminking/blog/item/6fcea58f918da9ddfd1f10bd.html

1—— 一个汉字在字符串中是以两个负的字符形式存储,所以本题只要把字符串中负字符的个数找出来,再

除以2 就OK了。

2——汉字机内码在计算机的表达方式的描述是,使用二个字节,每个字节最高位一位为1。
计算机中, 补码第一位是符号位, 1 表示为 负数, 所以 汉字机内码的每个字节表示的十进制数都是负数

 

 

下面的代码是改正后的,就是有一点区别:

#include <cstdlib>
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
    int d,len,n;
    char str[1000];
    
    cin>>n;
    getchar();
    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;
}

区别在于getchar()的位置,当把getchar放到cin下边时,就AC了,具体原因还是不明白!!!为什么这样写就不会超时呢?继续努力ing~

 

 

 

以下是我朋友的代码(可以AC):

#include <cstdlib>
#include <iostream>
#include<string.h>
using namespace std;

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

供大家参考!

posted @ 2012-07-30 13:46  Marshalkk  阅读(1452)  评论(1编辑  收藏  举报