存钱
题目描述
牛子爷赚了钱想存进T银行,但是T银行是7进制银行,里面的存款都是用7进制显示的.
牛子爷每次存完钱之后,不知道自己现在在银行的存款是多少
因为他不会10进制转换成7进制。
聪明的你,能帮帮牛子爷嘛?
输入
输入一个数T代表有T组测试样例(1<=t<=1000)
第一行是两个正整数n,m(n代表牛子爷存这笔钱之前在T银行的存款(牛子爷在上次在T银行存款时看的),m代表牛子爷要存的钱的数量)
(0<=n<=10^6,0<=m<=10^6)
注意 n是7进制的数,m是10进制的数
输出
牛子爷在存完这笔钱之后在T银行的存款
样例输入
2
10 7
6 10
样例输出
20
22
提示
在T银行的存款都是用7进制显示
10元存进T银行,你在T银行的存款会加上13(10转换成7进制是13)
牛子爷要存的钱是10进制数
题解:
#include <stdio.h>
#include<math.h>
int main() {
int T,n, m, i,a,b,k,s,x;
scanf("%d", &T);
for (i = 0; i < T; i++) {
scanf("%d %d", &n, &m);
k = 0, s = 0;
while (n) {//七进制转十进制
a = pow(7, k++);
s += n % 10 * a;
n /= 10;
}
x = m + s;
k = 0, s = 0;;
while (x) {//十进制转七进制
b = pow(10, k++);
s += x % 7 * b;
x /= 7;
}
printf("%d\n", s);
}
return 0;
}
跳棋大师
题目描述
作为一代跳棋大师,你的职业地位受到了来自人工智能的挑战。
最近,有公司宣布他们研发出了最新的跳棋人工智能“深黑”。但是它现在还只能挑战最简单的跳棋局面。
为了使人工智能方便,我们使用以下的跳棋规则。
1.跳棋由且仅由一列长串棋盘构成,假设长度为n,每个位置放置了一个障碍物或者为空,开头和结尾位置只能为空
2.跳棋可以利用障碍物来跳跃,跳跃指的是跳棋可以利用前方的一个棋子来跳跃任意正数距离,只能落在空上,不能落在障碍物上,一次跳跃只能跃过一个障碍物。
比如“棋空空空物空空空” -> “空空空空物棋空空” 合法
“棋空空空物空空空” -> “空空空空物空空棋” 合法
“棋空空空物物空空” -> “空空空空物物空棋” 违法 因为跃过了两个障碍物
3.我们称一个棋盘合法指的是假设你有一颗跳棋在开头位置,你可以通过规则2规定的方式跳到结尾位置
现在问题是给你一个n(1<=n<=1e5),问你一共可以构造出多少种不同的合法棋盘来考验“深黑”的性能。
棋盘不同指的是存在某个位置不同(障碍物或者空)。
因为答案种数可能很多,所以答案对(1000000007)取膜。
输入
输入只有一个数n,代表棋盘规模
(1<=n<=1e5)
输出
输出一个数代表一共可以构造出多少种不同的合法棋盘,因为答案种数可能很多,所以答案对(1000000007)取膜。
样例输入 复制
4
样例输出 复制
2
提示
“空物空空”,“空空物空” 两种是不同方案
题解:
#include<stdio.h>
long long a[100006]={1,0,1,2};
int main()
{
long long n,i;
scanf("%lld",&n);
for(i=4;i<n;i++)
{
a[i]=a[i-1]+a[i-2]+1;//找规律
a[i]%=1000000007;
}
printf("%lld",a[n-1]);
return 0;
}
3是一个神奇的数字!
题目描述
这是一道非常简单的题目, 对于一个数字如果他的连续子串能够 % 3 == 0, 这说明他是一个好数字, 反之则是坏数字.
例如: 104是一个好数字, 因为0是104的连续子串,0 % 3 == 0, 所以他是一个好数字!
112也是一个好数字, 因为12是112的连续子串, 12 % 3 == 0, 所以他是一个好数字!
12也是一个好数字, 因为12是 12 的连续子串, 12 % 3 == 0, 所以他是一个好数字!
17不是一个好数字,因为1 % 3 != 0, 7 % 3 != 0, 17 % 3 != 0, 所以他不是一个好数字!
输入
输入一个数T, 表示有T组数据 (1 <= T <= 1e5);
每组数据输入一个 L, R区间 (1 <= L <= R <= 1e9).
输出
对于每一组数据输出 [L , R] 区间 的所有好数字的数量。
样例输入
3
4 10
1 20
1 100
样例输出
3
11
76
题解:
#include<stdio.h>
main()
{
long long int f(long long int n);
long long int n;
scanf("%lld",&n);
long long x,y,k;
while(n--)
{
long long int c=0;
scanf("%lld %lld",&x,&y);
if(y>=100)
{
c=c+y-100+1;//大于等于100一定是
k=99;
}
else
k=y;
for( ;x<=k;x++)
{
if(x>=100)
c++;
else
{
if(x>=10)
{
if(f(x))
c++;
else if(f(x%10))
c++;
else if(f(x/10))
c++;
}
else
{
if(f(x))
c++;
}
}
}
printf("%lld\n",c);
}
}
long long int f(long long int n)
{
if(n%3==0)
return 1;
else
return 0;
}