吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3792|回复: 17
收起左侧

[C&C++ 转载] 【已经解决 】计算客OJ第24题:函数规律,看看我哪里没考虑到

[复制链接]
chinalixs 发表于 2015-3-13 17:05
本帖最后由 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后
1.png
我自己测试没发现错误,应该是有情况遗漏。
上代码
[C] 纯文本查看 复制代码
#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了。
删掉后,测试。。

QQ截图20150314130103.jpg

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

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

[C] 纯文本查看 复制代码
#include <stdio.h>
int main()
{
	char str[1000] = {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;
}


[C++] 纯文本查看 复制代码
#include <iostream>
#include <string>
using namespace std;
int main()
{
	int sum = 0, i=0;
	string str;
	cin >> str;
	while (i < str.size())
	{
		if (str[i]=='0' || str[i]=='6' || str[i]=='9')
		{
			++sum;
		}
		if (str[i]=='8')
		{
			sum += 2;
		}
		++i;
	}
	cout << sum << endl;
	return 0;
}
 楼主| chinalixs 发表于 2015-3-15 16:34
本帖最后由 chinalixs 于 2015-3-15 16:43 编辑

以后还是得多用字符串。过了
[C] 纯文本查看 复制代码
#include <stdio.h>

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

免费评分

参与人数 1热心值 +1 收起 理由
汽水 + 1 我很赞同!

查看全部评分

 楼主| chinalixs 发表于 2015-3-13 17:05
汽水 发表于 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这些也没兴趣。

免费评分

参与人数 1热心值 +1 收起 理由
chinalixs + 1 热心回复!

查看全部评分

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

我正是因为不会用字符数组才只能用int。这下就跟你学到了。。。你做的真多啊,这些都是你做的笔记吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-3 09:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表