您现在的位置是:首页 >技术交流 >算法修炼之练气篇——练气一层网站首页技术交流

算法修炼之练气篇——练气一层

命运之光 2024-06-17 10:14:38
简介算法修炼之练气篇——练气一层

博主:命运之光

专栏:算法修炼之练气篇

前言:每天练习五道题,炼气篇大概会练习200道题左右,题目有C语言网上的题,也有洛谷上面的题,题目简单适合新手入门。(代码都是命运之光自己写的,练完这200多道题就考了今年第十四届的B组蓝桥杯C/C++获得了省一,后面还会更新“算法修炼之筑基篇”里面包括了省赛到国赛这一个月训练的刷奖计划,大概有40道左右,感兴趣的话可以关注一下命运之光)

目录

题目1157: 亲和数

题目描述

分析

约束算法

整理

题目 1687: 数据结构-字符串连接

输入格式

输出格式

样例输入

样例输出

题目 1477: 字符串输入输出函数

题目描述

输入格式

输出格式

样例输入

样例输出

题目 3012: 分苹果

题目描述

输入格式

输出格式

样例输入

样例输出

题目 2772: 苹果和虫子(秒杀题,随便写)

题目描述

输入格式

输出格式

样例输入

样例输出

提示

??今日份修炼结束,再接再厉!!!


题目1157: 亲和数

这道题很简单,我写的也很简单,看一眼就懂

题目描述

古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:

1+2+4+5+10+11+20+22+44+55+110=284。

而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。
你的任务就编写一个程序,判断给定的两个数是否是亲和数

分析

这道题主要就是要读懂什么是真约数。

所为真约数举个例子就是约束不包含自己本身

例:

比如6的约数是1、2、3、6

而真约数是1、2、3

约束算法

for (i = 2; i <= num; i++)//真约束就把i<=num改为i<num即可
{
    if (num % i == 0)
    {
        printf("%d", i);
    }
    else
    {
        continue;
    }
}

下面就改一改将输出所有约束改为累加所有约束

for(i=1;i<num;i++)
{
    if(num%i==0)
    {
        sum=sum+i;//累加所有真约束和
    }
    else
    {
        continue;
    }
}

整理

#include<stdio.h>
int main()
{
    int i,M,sum=0;
    int A,B;
    scanf("%d",&M);
    while(M--)
    {
        scanf("%d %d",&A,&B);
        for(i=1;i<A;i++)
        {
            if(A%i==0)
            {
                sum=sum+i;
            }
            else
            {
                continue;
            }
        }
        if(sum==B)
        {
            printf("YES
");
        }
        else
        {
            printf("NO
");
        }
        sum=0;
    }
    return 0;
}

题目 1687: 数据结构-字符串连接

将给定的字符串连接起来。书中的算法描述如下:

图:字符串连接算法

输入格式

三对字符串,每对字符串占一行,用空格隔开。每个字符串只包含数字和英文字母大小写且长度不超过100。

输出格式

将后一个字符串连接到前一个字符串后面,如果结果字符串长度超过100,输出一行“Result String is cutted.”否则将结果字符串输出来。

样例输入

hello dotcpp 123 456 doyour best

样例输出

hellodotcpp 123456 doyourbest

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s1,s2;
    for(int i=0;i<3;i++)
    {
        cin>>s1>>s2;
        if(s1.length()+s2.length()>100)
        {
            cout<<"Result String is cutted."<<endl;
        }
        else
        {
            cout<<s1+s2<<endl;
        }
    }
    return 0;
}

题目 1477: 字符串输入输出函数

题目描述

编写函数GetReal和GetString,在main函数中分别调用这两个函数。在读入一个实数和一个字符串后,将读入的结果依次用printf输出。
两次输入前要输出的提示信息分别是" please  input  a  number: ”和" please  input  a  string: "

输入格式

输出格式

样例输入

9.56  hello

样例输出

please input a number: please input a string: 9.56 hello

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s1,s2;
    cin>>s1>>s2;
    cout<<"please input a number:"<<endl;
    cout<<"please input a string:"<<endl;
    cout<<s1<<endl;
    cout<<s2<<endl;
    return 0;
}

题目 3012: 分苹果

题目描述

把一堆苹果分给n个小朋友,要使每个人都能拿到苹果,而且每个人拿到的苹果数都不同的话,这堆苹果至少应该有多少个?

输入格式

一个不大于1000的正整数n,代表小朋友人数。

输出格式

一个整数,表示满足条件的最少苹果个数。

样例输入

8

样例输出

36

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    cout<<(1+n)*n/2;
    return 0;
}

题目 2772: 苹果和虫子(秒杀题,随便写)

题目描述

你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?

输入格式

输入仅一行,包括n,x和y(均为整数)。输入数据保证y <= n * x。

输出格式

输出也仅一行,剩下的苹果个数。

样例输入

10 4 9

样例输出

7

提示

注意:是要求完整的苹果数。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,x,y;
    cin>>n>>x>>y;
    int a,b;
    a=y/x;
    b=y%x;
    if(b!=0)
    {
        a=a+1;
    }
    cout<<n-a;
    return 0;
}

??今日份修炼结束,再接再厉!!!

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。