zzuli oj 1145 有问题的里程表 2

Description

  某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位(个位、 十位、百位等)上的数字都是如此。例如,如果里程表显示15339,汽车走过1公里之后,该里程表显示15350。

Input

  输入一个整数num,表示里程表显示的数值,长度不超过9位,且一定不含整数4。

Output

  输出一个整数,表示实际行驶的里程。

Sample Input

  150

Sample Output

  117

这道题看似简单,如果用常规的for一个一个加,再跳过4的话,会超时。

那么可以换一下思路,还记得九进制是只含有0~8 九个数字么,这道题就可以看做是没有4这个数字的九进制数···

逐位*9,以4为界进行累加

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int num,sum=0;
   int i=0,j,k;
   int m;
   int str[10];
   scanf("%d", &num);
   while(num>0)
   {
       str[i]=num%10;
       num=num/10;
       i++;
   }
   for(j=0;j<i;j++)
   {
       m=1;
       for(k=1;k<=j;k++)
       {
           m*=9;
       }
       if(str[j]<=3)
        sum+=str[j]*m;
       if(str[j]>=5)//以4隔开
        sum+=(str[j]-1)*m;
   }
   printf("%d\n", sum);
   return 0;
}
时间: 2024-10-24 09:02:14

zzuli oj 1145 有问题的里程表 2的相关文章

zzuli oj 1134 字符串转换

题目链接: https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1134 Description 输入一个以回车结束的字符串,它由数字和字母组成,请过滤掉所有非数字字符,然后将数字字符串转换成十进制整数后乘以2输出. Input 输入一个以回车结束的字符串,长度不超过100,由数字和字母组成. Output 将转换后的整数乘以2输出,测试数据保证结果在int范围内. Sample Input sg987aa65t498 Sample Output 1

zzuli oj 1178 单词数

Description 统计一篇文章里不同单词的总数. Input 有多组数据,每组一行,每组就是一篇小文章.每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束. Output 每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数. Sample Input you are my friend # Sample Output 4 第一次写的时候没看清题  (不同单词)   导致WA了一发·· 思路理清楚后也不是什么难题,用二维数组来记录一行句子中的各个单词,每个

zzuli oj 1167逆转数(指针专题)

Description 任意给你一个整数,这个数可能很大(最长不超过100位),你能求出它的逆转数吗?  逆转数定义如下:  1.一个末尾没有0的整数,它的逆转数就是各位数字逆序输出:  2.一个负数的逆转数仍是负数:  3.一个末尾有0的整数,它的逆转数如同下例:  reverse (1200) = 2100  reverse (-56) = -65  要求定义并使用如下函数:  void reverse(char *str)  {  //函数求出str的逆转数并存入str.  } Input

zzuli oj 1135 算菜价

题目: Description 妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐.现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵. Input 输入含有一些数据组,每组数据包括菜种(不含空格的字串),数量w(计量单位不论,一律为double型数)和单价p(double型数,表示人民币元数),因此,每组数据的菜价就是数量乘上单价啊.菜种.数量和单价之间都有空格隔开的. Output 支付菜价的时候,由于最小支付单位是角,所以总是在支付的时候采用四舍

zzuli OJ 1128: 课程平均分

Description 期末考试结束,班主任拿到了本班学生的成绩汇总表.由m行n列组成(本班共同拥有m名学生,本学期有n门课程),每行是一个同学的n门课程成绩,请编敲代码,计算并输出每门课的平均分.结果保留2位小数. Input 第一行是两个整数m和n,表示本班的人数和本学期课程数目,0<m<=1000,0<n<=10. 接下来是成绩单,有m行,每行n个实数. Output 输出一行,有n个实数,保留两位小数,表示每门课的平均分,用空格隔开. Sample Input 5 4 80

zzuli OJ 1076: 三位数求解

Description 已知xyz+yzz=n,其中n是一个正整数,x.y.z都是数字(0-9),编写一个程序求出x.y.z分别代表什么数字.如果无解,则输出"No Answer" 注意:xyz和yzz表示一个三位数,而不是表示x*y*z和y*z*z. Input 输入一个正整数n. Output 输出一行,包含x.y.z的值,每个数值占4列. Sample Input 532 Sample Output 3 2 1 HINT Source #include <stdio.h&g

zzuli OJ 1083: 数值统计(多实例测试)

Description 统计给定的n个数中,负数.零和正数的个数 Input 输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数:如果n=0,则表示输入结束,该行不做处理. Output 对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数.零和正数的个数. Sample Input 6 0 1 2 3 -1 05 1 2 3 4 0.50 Sample Output 1 2 30 0 5 HINT Source #include

zzuli OJ 1081: n个数求和 (多实例测试)

Description 求n个整数的和. Input 输入第一行是一个整数T,表示有T组测试实例: 每组输入包括两行: 第一行一个数n表示接下来会有n个整数: 第二行空格隔开的n个数. Output 对于每组输入,在一行输出n个数的和(保证和不会超出int类型的范围)! Sample Input 231 2 34-1 0 -19 22 Sample Output 62 HINT Source #include<stdio.h> int main() { int t,a[14],b,c,j,i,

zzuli OJ 1082: 敲7(多实例测试)

Description 输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...) Input 首先输入一个整数t,表示有t组数据. 然后有t行,每行一个整数N.(N不大于30000) Output 对于每组数据 ,输出从小到大排列的不大于N的与7有关的数字.每组数据占一行,每个数字后面有一个空格: Sample Input 22030 Sample Output 7 14 17 7 14 17 21 27 28 HINT Source #include<std