chinalixs 发表于 2015-3-13 17:05

【已经解决 】计算客OJ第24题:函数规律,看看我哪里没考虑到

本帖最后由 chinalixs 于 2015-3-15 16:43 编辑

题目是统计x的十进制表示中有多少个圈圈。
f(0)=1, f(1)=0, f(2)=0, f(3)=0, f(4)=0, f(5)=0, f(6)=1, f(7)=0, f(8)=2, f(9)=1。


是形象的,就好比2048,0是一个圈圈,8里有俩圈圈。输出3


样例输入2048
样例输出3我的代码提交到OJ后

我自己测试没发现错误,应该是有情况遗漏。
上代码#include <stdio.h>
int main()
{
      long n,m=0,a;
      scanf("%ld",&n);
      while(n){
      a=n % 10;
      switch(a)
      {
                case 0:m++;break;
                case 6:m++;break;
                case 8:m+=2;break;
                case 9:m++;break;
                default:break;
      }
      n /= 10;
      }
      
      printf("%ld",m);
      return 0;
}

醉空流澈 发表于 2015-3-14 13:05

本帖最后由 醉空流澈 于 2015-3-14 13:06 编辑

题目说了,读入一个x(1≤x≤10的1000次方),所以最后你不用判断n==0,再说,加上这个,跳出while循环时,n=0,所以m又变成1了。
删掉后,测试。。



10的1000次方,这数太大了,应该就是因为这个原因,所以标准答案为0的时候你却得出了3。
所以,用字符串吧。

下面第一个源码是计蒜客那道题里的讨论里copy来的,改了下。
第二个是C++语言,我觉得比第一个直观点。

#include <stdio.h>
int main()
{
        char str = {0};
        char *p;
        int sum = 0;
        scanf("%s", str);
        p = str;
        do{
                if(*p == '6' || *p == '9' || *p == '0')
                        sum += 1;
                if(*p == '8')
                        sum += 2;
        }while(*p++ != '\0');
        printf("%d\n", sum);
        return 0;
}

#include <iostream>
#include <string>
using namespace std;
int main()
{
        int sum = 0, i=0;
        string str;
        cin >> str;
        while (i < str.size())
        {
                if (str=='0' || str=='6' || str=='9')
                {
                        ++sum;
                }
                if (str=='8')
                {
                        sum += 2;
                }
                ++i;
        }
        cout << sum << endl;
        return 0;
}

chinalixs 发表于 2015-3-15 16:34

本帖最后由 chinalixs 于 2015-3-15 16:43 编辑

以后还是得多用字符串。过了
#include <stdio.h>

int main()
{
        int i,m=0;
        char a;
        scanf("%s",&a);
       
        for(i=0;a!='\0';i++)
        {
               
                if(a=='0')m++;
                if(a=='6')m++;
                if(a=='8')m+=2;
                if(a=='9')m++;
               
               
        }
        printf("%d",m);
       
        return 0;
}

chinalixs 发表于 2015-3-13 17:05

@homer @醉空流澈 来找茬啦

汽水 发表于 2015-3-13 17:07

应该是有考虑不周全的

chinalixs 发表于 2015-3-13 21:05

ubuntu 发表于 2015-3-13 17:26
算出来3标准是0?不科学啊,会不会出现0000这样的奇葩数字?
另外,如果数据给个0的话,应该是1个圈的,但 ...

对对对,输入0输出1我就没考虑到。

然后我就找不到错误了。应该不会000吧。那不是逼我用字符型么。我刚入门都不会啊

chinalixs 发表于 2015-3-13 21:55

pcwps 发表于 2015-3-13 21:35
基本原则塔顶地基本原则塔顶地 基本原则塔顶地

新申请号还水,呵呵

chinalixs 发表于 2015-3-13 21:59

ubuntu 发表于 2015-3-13 21:20
那就不知道了,没有测评数据么?
程序算出3但是答案是0,实在想不出什么情况了。

这个OJ 不提供输入数据,不知兄台有没有好的OJ推荐

汽水 发表于 2015-3-15 00:50

醉空流澈 发表于 2015-3-14 13:05
题目说了,读入一个x(1≤x≤10的1000次方),所以最后你不用判断n==0,再说,加上这个,跳出while循环时,n= ...

大神,你计算客得做了多少了!你觉得有用吗?

醉空流澈 发表于 2015-3-15 10:09

汽水 发表于 2015-3-15 00:50
大神,你计算客得做了多少了!你觉得有用吗?

=_= 我是想做,不过没时间。每次楼主提问,我就去看下那道题而已。
我个人不喜欢算法,所以对ACM这些也没兴趣。

chinalixs 发表于 2015-3-15 16:07

醉空流澈 发表于 2015-3-14 13:05
题目说了,读入一个x(1≤x≤10的1000次方),所以最后你不用判断n==0,再说,加上这个,跳出while循环时,n= ...

我正是因为不会用字符数组才只能用int。这下就跟你学到了。。。你做的真多啊,这些都是你做的笔记吗?
页: [1] 2
查看完整版本: 【已经解决 】计算客OJ第24题:函数规律,看看我哪里没考虑到