我们继续来看一看语文还不错的出题老师出的第二题
2.颠簸的旅程(bump)
【题目描述】
交易完成后α大使准备返回α星球的时候,发现飞船有故障,每当仪表里程盘里面的数字更新时,如果里面包含数字x,飞船就会颠簸,里面有几个x就会颠簸几下,出发前仪表盘的里程数是S,到α星球的距离是L,请帮忙求出整个返回过程中,到达α星球时,飞船一共会颠簸多少下。
【输入】
输入为一行,三个整数,依次是初始里程数S,距离L,会产生颠簸的数字x。
【输出】
输出为一行一个整数,飞船总共颠簸的次数。
【输入输出样例】
bump.in
bump.out
11944 12 5
9
【数据范围】
对于100%数据,0 <= S,L <= 106,0 <= x <= 9。
so........
传统的数字丰润有木有??!!!!!
我一下子后悔当初用将近一个小时写那个闹心的进制转换
char char char!!!!!
所以 谈一谈方法喽
我本人认为 各位分割分辣么两种
第一种是知道几位的 用mo和除法就能轻松搞定
当然 noip从来不考这么简单的东西.............连一步都没有...........
那么隆重推出第二种..........
各位分割
首先 ,我么来找一个大致的方向.....
为什么不算一下这个数到底有几位 ,,然后和第一种一样呢???
没错 就这么干!
奉上代码一次!!
bling bling~~~
#include <stdio.h>
int fen(int a)
{
int c=1;
int cnt=0;
while(a/c>0)
{
cnt++;
c*=10;
}
return cnt;
}
孩子 别着急粘贴。。这只是一个函数党写的一个小函数..别激动
至少这样我们就得到了位数
那么接下来呢??????
一位一位除下去,到最后的时候直接/一个一直*10的那个数
okok
太棒了
妈妈再也不用担心我的各位分割
代码君~~~~
#include <stdio.h>
int main()
{
freopen("bump.in","r",stdin);
freopen("bump.out","w",stdout);
int s;
int l;
int x;
scanf("%d%d%d",&s,&l,&x);
int t=0;
for(int i=s+1;i<=s+l;i++)
{
int c=1;
while(i/c>0)
{
if(i/c>0)
{
if(i/c/10>0)
{
if(i/c%10==x)
t++;
}
else
{
if(i/c==x)
t++;
break;
}
}
c*=10;
}
}
printf("%d",t);
fclose(stdin);
fclose(stdout);
return 0;
}
bump的代码就是这样咯
如果你真的没做够的话 还想试试各位分割......
有方法!!
我额外送您一道题!
奉上
Description
给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:
注意:
1. 加号与等号各自需要两根火柴棍
2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C> =0)
3. n根火柴棍必须全部用上
Input
输入共一行,有一个整数n(n< =24)。
Output
输出共一行,表示能拼成的不同等式的数目。
Sample Input
Sample Output
HINT
【输入输出样例1解释】
2个等式为0+1=1和1+0=1。
【输入输出样例2解释】
9个等式为:
0+4=4
0+11=11
1+10=11
2+2=4
2+7=9
4+0=4
7+2=9
10+1=11
11+0=11
偶。。。。慢慢存 慢慢存。。。
#include <stdio.h>
int add(int x)
{
int k=1;
int cnt=0;
while(x/k>0)
{
cnt++;
k*=10;
}
return cnt;
}
int main()
{
int x;
scanf("%d",&x);
int c=x-4;
int a[3000]={6,2,5,5,4,5,6,3,7,6};
for(int i=10;i<=2800;i++)
{
int tmp=add(i);
int k=1;
for(int j=1;j<tmp;j++)
{
a[i]+=a[i/k%10];
k*=10;
}
a[i]+=a[i/k];
}
int k=0;
for(int i=0;i<=1111;i++)
{
for(int j=0;j<=1000;j++ )
{
if(a[i]+a[j]+a[i+j]==c)
{
k++;
}
}
}
printf("%d",k);
}