菜鸟杯(三)

存钱

题目描述

牛子爷赚了钱想存进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 
#include
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
long long a[100006]={1,0,1,2};
int main()
{
    long long n,i;
    scanf("%lld",&n);
    for(i=4;i

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
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;
}

你可能感兴趣的:(算法,数据结构)