时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:354

解决:191

题目描述:
在JOBDU团队里,陈博是最讲平均主义的人了,但并不是像梁山好汉那样能够做到有钱同花,有肉同吃,毕竟,他还是被家里的领导管着的……陈博的平均主义,就只能体现在他对数字的喜好了。陈博特别喜欢一类“平均数”,“平均数”的具体定义为:
对于一个数字,当其以十进制形式表示时,我们可以将其每一位的数字分为两堆,两堆数字的和是相等的。
例如,数字363就是一个理想的平均数,因为我们可以将其分为相等的两堆{3, 3}, {6}。
现在陈博就要考考你了,看你是否掌握了他的平均主义。假如给你一个整数范围[A, B],你是否能找出,在这个范围内,究竟有多少“平均数“?
输入:
每个测试文件包含多个测试案例,每个测试案例一行,每行包括两个整数A、B,其中[A,B]这个待查看的整数范围。其中我们能保证1 <= A <= B <= 109,且0 <= B – A <= 105
输出:
对于每个整数范围[A, B],返回一个整数,表明这个整数范围内有多少个整数是陈博所喜欢的“平均数”。
样例输入:
1 50
1 1000
样例输出:
4
135

思路:

对这个范围内的每个数X分别进行如下分析:

将X的各位数进行拆分,并算出各位数的和S,深度遍历尝试是否能找到和为S/2的几个数。如果找到则为平均数。

代码:

#include <stdio.h>
#include <stdlib.h> #define N 64 int visited[N];
int n;
int a[N];
int sum;
int aver; void parse(int i)
{
n = 0;
while(i)
{
a[n++] = i%10;
i /= 10;
}
} void init()
{
int i;
for (i=0; i<n; i++)
visited[i] = 0;
} int cmp(const void *a, const void *b)
{
return (*(int *)a < *(int *)b) * 2 - 1;
} int choose(int cur, int n)
{
if (cur == aver)
return 1;
if (cur > aver || n == 0)
return 0;
if (!visited[n-1])
{
visited[n-1] = 1;
if (choose(cur+a[n-1], n-1) == 1)
return 1;
visited[n-1] = 0;
}
if (choose(cur, n-1) == 1)
return 1;
return 0;
} int main()
{
int i, j;
int x, y;
int count; while(scanf("%d%d", &x, &y) != EOF)
{
count = 0;
for (i=x; i<=y; i++)
{
parse(i);
qsort(a, n, sizeof(a[0]), cmp);
sum = 0;
for (j=0; j<n; j++)
sum += a[j];
if (sum%2 == 1)
continue;
init();
aver = sum/2;
if (choose(0, n) == 1)
count ++;
}
printf("%d\n", count);
}
return 0;
}
/**************************************************************
Problem: 1358
User: liangrx06
Language: C
Result: Accepted
Time:260 ms
Memory:912 kb
****************************************************************/

九度OJ 1358:陈博的平均主义 (遍历、递归)的更多相关文章

  1. 【九度OJ】题目1078:二叉树遍历 解题报告

    [九度OJ]题目1078:二叉树遍历 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1078 题目描述: 二叉树的前序.中序.后序遍历 ...

  2. 九度OJ 1359:大魏树遍历 (树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:299 解决:29 题目描述: 大魏是JOBDU技术组里最喜欢折腾的一个了,单反.骑车.改九度页面,当然还有YY prado.我们姑且先把这些 ...

  3. 九度OJ 1255:骰子点数概率 (递归、DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:316 解决:29 题目描述: 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S.输入n,打印出S的所有可能的值出现的概率. 输入: 输入包 ...

  4. 九度OJ 1081:递推数列 (递归,二分法)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6194 解决:864 题目描述: 给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q.这里n >= 2. 求第 ...

  5. 九度oj 题目1358:陈博的平均主义

    题目描述: 在JOBDU团队里,陈博是最讲平均主义的人了,但并不是像梁山好汉那样能够做到有钱同花,有肉同吃,毕竟,他还是被家里的领导管着的……陈博的平均主义,就只能体现在他对数字的喜好了.陈博特别喜欢 ...

  6. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  7. 九度OJ 1502 最大值最小化(JAVA)

    题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...

  8. 九度OJ,题目1089:数字反转

    题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...

  9. 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)

    题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...

随机推荐

  1. jQuery 获取DOM节点的两种方式

    jQuery中包裹后的DOM对象实际上是一个数组,要获得纯粹的DOM对象可以有两种方式: 1.使用数组索引方式访问,例如: var dom = $(dom)[0]; 如: $("#id&qu ...

  2. Spring 注入简介

    注入方式有三种,setter,构造方法,接口注入.   常用的是setter注入和构造方法注入.   setter注入: <?xml version="1.0" encodi ...

  3. 各种broker对比

    broker的主要职责是接受发布者发布的所有消息,并将其过滤后分发给不同的消息订阅者.如今有很多的broker,下面就是一张关于各种broker对比的图片: 在使用mosquitto时,如果想使用集群 ...

  4. centos 7 查看修改时区

    查看时区 date -R 修改时区 # timedatectl list-timezones # 列出所有时区 # timedatectl set-local-rtc 1 # 将硬件时钟调整为与本地时 ...

  5. cygwin开发环境搭建与apt-cyg的应用

    1.Cygwin安装 http://www.cygwin.com/下载安装工具 详细安装过程參照http://jingyan.baidu.com/article/6b97984d83dfe51ca2b ...

  6. Codeforces #310ACase of Matryoshkas(模拟)

    [题目链接]click here~~ [题目大意]给你n个玩具,规定仅仅能小的玩具套在大的上面.并且是规格依次递增的,比方:1->2->3,求全部玩具套完须要的最小时间花费 [解题思路]: ...

  7. C++程序设计(第4版)读书笔记_C++概览:基础知识

    变量赋值 常用的变量赋值都是用“=”去赋值的 ; 但是如果把一个浮点数赋值给i的话,就会造成精度损失,在C++中最好使用初始化列表的方式“{}”给变量赋值,这样可以保证不会发生某些可能导致信息丢失的类 ...

  8. UML序列图

    先准备好之前的类图,然后在最开始的地方新添加一个版块“交互设计” Add Diagram --> Sequence Diagram Add --> Actor建立一个user 然后就可以拖 ...

  9. codeforces #364b Cells Not Under Attack

    比赛的时候 long long sum=n*n,计算不出1e10长度到数,没有搞掉. 哎,以后要注意这个地方.这个题其实不难: 统计能被攻击到的个数,然后用总的个数减掉就可以了.注意有些地方重复计算, ...

  10. Solve Equation gcd(x,y)=gcd(x+y,lcm(x,y)) gcd(x,y)=1 => gcd(x*y,x+y)=1

    /** 题目:Solve Equation 链接:http://acm.hnust.edu.cn/JudgeOnline/problem.php?id=1643 //最终来源neu oj 2014新生 ...