卡码网刷题

文章介绍了两个编程问题:一个是关于计算充值后小明可以获得多少天话费的奖励规则问题,另一个是判断小宇与小明的亲属关系问题。第三个问题是生成特定数字图形和镂空三角形的代码实现。
摘要由CSDN通过智能技术生成

参考网站 

题目页面 (kamacoder.com)

题目10 11 12 13

题目10 商业活动

 题目页面 (kamacoder.com)

题目描述 

小明每天的话费是1元,运营商做活动,手机每充值K元就可以获赠1元话费,一开始小明充值M元,问最多可以用多少天? 注意赠送的话费也可以参与到奖励规则中

输入描述

输入包括多个测试实例。每个测试实例包括2个整数M,K(2<=k<=M<=1000)。M=0,K=0代表输入结束。

输出描述

对于每个测试实例输出一个整数,表示M元可以用的天数。

输入示例
2 2
4 3
13 3
0 0
输出示例
3
5
19
提示信息

注意第三组数据「13 3」结果为什么是19呢, 13/3=4,获得4元奖励。 13%3=1,还剩下1元,4+1=5,5元继续参加奖励规则。 5/3=1,获得1元奖励。 5%3=2,剩下2元,1+2=3,3元继续参与奖励规则。 3/3=1,获得1元奖励。 3%3=0,剩下0元,1+0=1。 1元不能参与剩下奖励。所以一共可以使用的天数是 13+4+1+1=19

#include<iostream>
using namespace std;


int main(){
    
    
    int m,k;
    string str;
    while(cin>>m>>k){
       
     
       
    //   cout<<m<<endl;
    //   cout<<k<<endl;
       if(m==0&&k==0){
           break;
       }
       
       int left=m;
   
       int res=m;
    
      while(left>=k){
           
          res+=(left/k);
          left=left%k+left/k;
    
           
           
           
      }
       
       
      cout<<res<<endl;
      
        
    }
    
    
    
    
    
    
    return 0;
}

11.

11. 共同祖先

题目页面 (kamacoder.com)

时间限制:1.000S  空间限制:32MB

题目描述

小明发现和小宇有共同祖先!现在小明想知道小宇是他的长辈,晚辈,还是兄弟。

输入描述

输入包含多组测试数据。每组首先输入一个整数N(N<=10),接下来N行,每行输入两个整数a和b,表示a的父亲是b(1<=a,b<=20)。小明的编号为1,小宇的编号为2。
输入数据保证每个人只有一个父亲。

输出描述

对于每组输入,如果小宇是小明的晚辈,则输出“You are my younger”,如果小宇是小明的长辈,则输出“You are my elder”,如果是同辈则输出“You are my brother”。

输入示例
5
1 3
2 4
3 5
4 6
5 6
6
1 3
2 4
3 5
4 6
5 7
6 7
输出示例
You are my elder
You are my brother
#include<iostream>
using namespace std;
#include<vector>



int main(){
    
    int n;
    
    while(cin>>n){
        
        // cout<<n<<endl;
        vector<int> relations(30,0);
        int a;
        int b;
        
      
        for(int i=0;i<n;i++){
            
            cin>>a>>b;
            relations[a]=b;
            
        }
        int count_1=0;
        int count_2=0;
        a=1,b=2;
        while(relations[a]!=0){
            a=relations[a];
            count_1++;
        }
        
        while(relations[b]!=0){
            b=relations[b];
            count_2++;
        }
        // cout<<"count_1=="<<count_1;
        // cout<<"count_2=="<<count_2;
        if(count_2==count_1)
            cout<<"You are my brother"<<endl;
        else if(count_1>count_2)
            cout<<"You are my elder"<<endl;
        
        else 
            cout<<"You are my younger"<<endl;
        
        
        
        
        
    }
    
    
    
    
    return 0;
}

 

12. 打印数字图形

时间限制:1.000S  空间限制:32MB

题目描述

先要求你从键盘输入一个整数n(1<=n<=9),打印出指定的数字图形。

输入描述

输入包含多组测试数据。每组输入一个整数n(1<=n<=9)。

输出描述

对于每组输入,输出指定的数字图形。
注意:每行最后一个数字后没有任何字符。

输入示例
5
输出示例
    1
   121
  12321
 1234321
123454321
 1234321
  12321
   121
    1
#include <iostream>
using namespace std;

void printFigure(int n) {
    // 构建上半部分包括中间行
    for (int i = 1; i <= n; i++) {
        // 打印前置空格
        for (int j = 1; j <= n - i; j++) {
            cout << " ";
        }
        // 打印左半边数字包括中位数
        for (int j = 1; j <= i; j++) {
            cout << j;
        }
        // 打印右半边数字,不包括中位数
        for (int j = i - 1; j >= 1; j--) {
            cout << j;
        }
        // 换行
        cout << endl;
    }

    // 构建下半部分,不包括中间行
    for (int i = n - 1; i >= 1; i--) {
        // 打印前置空格
        for (int j = 1; j <= n - i; j++) {
            cout << " ";
        }
        // 打印左半边数字包括中位数
        for (int j = 1; j <= i; j++) {
            cout << j;
        }
        // 打印右半边数字,不包括中位数
        for (int j = i - 1; j >= 1; j--) {
            cout << j;
        }
        // 换行
        cout << endl;
    }
}

int main() {
    int number;
    while (cin >> number) {
        printFigure(number);
    }
    return 0;
}

 

13. 镂空三角形

时间限制:1.000S  空间限制:32MB

题目描述

把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果。在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果。

输入描述

每行包含一个字符和一个整数n(0<n<41),不同的字符表示不同的花纹,整数n表示等腰三角形的高。显然其底边长为2n-1。如果遇到@字符,则表示所做出来的样板三角形已经够了。

输出描述

每个样板三角形之间应空上一行,三角形的中间为空。行末没有多余的空格。每条结果后需要再多输出一个空行。

输入示例
X 2
A 7
@
输出示例
 X
XXX

      A
     A A
    A   A
   A     A
  A       A
 A         A
AAAAAAAAAAAAA
 
#include<iostream>
#include<vector>
using namespace std;
 
void printFig(string c, int a)
{
 
    if (a == 1)
    {
        cout << c;
        cout<<endl;
        return;
    }
 
    if (a == 2)
    {
        cout << " " << c << endl;
        cout << c << c << c << endl;
        cout<<endl;
        return;
    }
 
    int n = a * 2 - 1;
 
    std::vector<vector<string>> arr(a, vector<string>(n, " "));
 
    arr[0][a - 1] = c;
 
    for (int i = 1; i <= a - 2; i++)
    {
 
        arr[i][a - i - 1] = c;
        arr[i][a + i - 1] = c;
    }
 
    for (int i = 0; i < n; i++)
    {
        arr[a - 1][i] = c;
    }
 
    for (auto it : arr)
    {
        for (auto i : it)
        {
            cout << i;
        }
        cout << endl;
    }
    cout<<endl;
}
 
int main(){
     
    string c;
    int a;
    while(cin>>c>>a){
        if(c=="@")
            break;
        // cout<<a<<endl;
        printFig(c,a);
         
         
         
         
         
         
         
         
    }
     
     
     
     
     
     
     
     
    return 0;
}
 

 

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值