码蹄集2023部分题目(第四弹)

1🐋🐋🐋MC0230小码哥教数学(黄金;数论基础)

时间限制:1秒

占用内存:256M

🐟题目描述

为了加深学生对数学中两个数互质的理解,小码哥带大家玩游戏。 小码哥从学生中随机抽出偶数个的学生,最少2个,最多16个,然后把抽出来的学生分为两组并各自站成一排,每一组的每一位学生,小码哥都随机从1到9里面抽一个数字发给他(两个学生数字可以相同)。这样每一组学生用他们领到的数字可以组成一个数,比如某一组有两个学生,第一个学生拿到的是1,第二个学生拿到的是2,则组成的数字是12。 现在,如果这两组学生组成的两个数字互质,则直接输出0且结束游戏。否则,让两组的所有学生左移1位(第一个学生移动到最右边),比如某一组的数字是123,则左移1位变成了231,如果互质,输出1且结束游戏。依次类推,直到两个数字互质为止。然后输出到互质状态下移动的次数。 如果不管怎么移动,两组数字都不能互质,则输出-1。

🐟输入输出格式

输入格式:
两行,代表两组同学最开始组成的两个数字。各个位上都不会是0,两组数字位数相同。
​
输出格式:
最少需要左移动几次,两组数字互质。
如果一直无法互质输出-1,一开始就互质直接输出0.
​

🐟样例

🐚样例1

输入:
12
14
​
输出:
1

🐚样例2

输入:
13
17
​
输出:
0

🐟题目思路

这道题目主要就是两个操作:1判断两个数是否互质;2左移。

先说移位问题:考虑到移位问题,我们知道,字符串是最好进行移位操作的,所以我们直接选择输入数据为字符串型,然后使用stoi(a)的函数将字符串a转变为整数型数据。

然后就是判断两个数是否互质:互质的定义是两个数的最大公因子为1,那么我们只要能求出两个数的最大公因子就能得知二者是否互质。谈谈我对下边这个函数的理解,t是a对b取余的结果,如果等于0,那么意味着a=kb,最大公因子就是b;如果有余数,那么最大公因子只会是余数和目前最大的公因子的关系,因为剩下的部分都能被上次的b整除,当然这里我也是第一次接触,比较陌生,也不是很理解,如果有比较理解的大佬们欢迎评论区留言~

🐟代码

#include<bits/stdc++.h> 
​
using namespace std;
​
bool zhishu(int a, int b)//※判断两个数的最大公约数&&判断两个数是否互质
{
    if(a==1||b==1) return true;// 有一个数为1,二者一定互质
    while(1)// 求出两个正整数的最大公约数
    {          
        int t=a%b;
        if(t==0) break;//一个能被另一个整除,最大公约数为b
        else
        {
            a=b;
            b=t;
        }
    }
    if(b>1) return false;// 如果最大公约数大于1,表示两个正整数不互质
    else return true;   // 如果最大公约数等于1,表示两个正整数互质
}
​
void swap(string &s) //左移一位
{
    int a=s[0];
    for(int i=0;i<s.size();i++) s[i]=s[i+1];
    s[s.size()-1]=a;
}
​
int main( )
{
    string a,b;
    cin>>a>>b;
    int flag=0,count=0;
    if(zhishu(stoi(a),stoi(b))) cout<<0<<endl;
    else
    {
        for(int i=0;i<a.size()-1;i++)
        {
            count++;
            swap(a);
            swap(b);
            if(zhishu(stoi(a),stoi(b))) 
            {
                cout<<count<<endl;
                flag=1;
                break;
            }
        }
        if(flag==0) cout<<-1<<endl;
    }
    return 0;
}

判断是否互为质数函数思路来自CSDN用户——LeetCode刷题记录

swap函数思路来自题目评论区——Coffee

2🌻🌻🌻MC0231圣诞树上的星星(青铜;简单;有趣)

这道题目很简单,写这道题目,纯纯是因为编程太久了,很累了,所以看到这种有意思的小题就很喜欢,这里也不用什么题目解析了,上代码和样例,大家一块放松一下吧🌺~累了记得好好休息🌺~

🌼题目描述

小码哥在过圣诞节!

小码哥家里有很多个星星 *,他打算把这些星星装饰到圣诞树上(圣诞树最少1层,最多100层),每一层都放上与层数一致的星星数量,但是当层数为3的倍数的时候,该层圣诞树上不装饰星星,用树根“|”代替。如二层的圣诞树,第一层有1颗星星,第二层有2颗星星;三层的圣诞树,第一层有1颗星星,第二层有2颗星星,第三层不装饰星星,有0颗星星。

现在有一颗 n 层的圣诞树,你能帮他装饰树上的星星吗?

🌼输入输出格式

输入格式:
一行一个整数 n(1≤n≤100)n(1≤n≤100) 表示圣诞树的层数。
​
输出格式:
圣诞树星星的形状。

🌼样例

输入:
10
​
输出:
*
**
|
****
*****
|
*******
********
|
**********

🌼代码

#include<bits/stdc++.h> 
​
using namespace std;
​
int main( )
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        if(i%3==0) cout<<"|"<<endl;
        else
        {
            for(int j=0;j<i;j++) cout<<"*";
            cout<<endl;
        }
    }
    return 0;
}

⭐点赞收藏不迷路~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值