杭电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;

}

供大家参考!

你可能感兴趣的:(汉字)