22.【算法五章-----01】

发布于:2023-01-18 ⋅ 阅读:(402) ⋅ 点赞:(0)


在这里插入图片描述

第一篇:(矩形边数)

已知3个矩形的大小依次是axb,a2xb2和agxb3。用这3个矩形能拼出的所有多边形中,边数最少可以是多少?
在这里插入图片描述

解题思路

在解决此类问题的时候,我才用最大边化。即首先找出3个矩阵整在一起的情况下边数最大为多少.如果有边相等的,那么对应的变数就会与最大值差两个,否则不差,仍然是两个.

代码展示

 
#include <iostream>
using namespace std;
int main()
{
    cout << "请输入数据的组数:" << endl;
    int n, a[100],m=0;
    cin >> n;
    for (int i = 0; i < n; i++)               //几组数据
    {
        cout << "请输入第" << i + 1 << "组数据:" << endl;
        for (int j = i*6; j < 6*(i+1); j++)        //每组数据多少
        {
            cin >> a[j];
        }
    }
    for (int i = 0; i < n; i++)          //一组数据作比较
    {
        for (int j = i * 6; j < 6 * (i + 1); j++)          //   一对一对应,
        {
            for (int k = j; k < 6 * (i + 1)-1; k++)
            {
                if (a[j] == a[k + 1])
                {
                    m++;
                }
            }
            
        }
        cout << 8 - (m * 2) << endl;         
        m = 0;
    }
}

第二篇:(球回弹多少cm)

C++有一个皮球从a厘米高度开始下落,每次落地后反弹回原来高度的一半。经过多次反弹后,如果皮球是从1厘米的高度下落,那么皮球触地后就不再反弹了。问皮球一共经过了多少厘米
输入格式
一个整数a。
输出格式
一个整数。
输入/输出例子1输入:10 输出:26 样例解释 10+5+5+2+2+1+1=26

整体思路:

本题问共经历了多少厘米,我们可以想象一下,如果一个球从10cm的高度落下,那么经过第一次弹跳后落地,那么经历了多少cm呢?答案是 10cm(第一次落地)+5cm(第一次弹起)+5cm(第一次谈起落地)。那么第二次弹起落地是多少呢?2.5cm+2.5cm.所以我们返现规律,每次落地弹起的高度是:(落地时高度)/2*2;

代码展示:

 
#include  <iostream>
using namespace std;
#include <stdlib.h>
#include  <string.h>
int main()
{
    int a,m=0;
    cout << "请输入从多cm" << endl;
    cin >> a;
    int sum = a,sum1=0;
    for (int i = 0; i < a; i++)
    {
        sum /=2;
        sum1 += sum*2;
    }
    cout << "需要" << sum1+a << endl;              //为什么要+a?  因为没算第一个洛的位置
}

他人代码展示:

#include <iostream>
using namespace std;
int main()
{
    int a;
    cin>>a;
    int sum = a;
    while(a > 1)
    {
        a/=2;
        sum += a*2;
    }
    cout<<sum<<endl;
    return 0;
}
 

第三篇:(删除重复项)

删除两个字符串里面的重复项,然后输出删除后的结果:

整体思路:

首先我们先要进行手动输入两个字符串,在这里我们要知道字符串的特性 s3=s3+s1;可以实现字符串的合并.然后设置一个for循环进行一个个判断是否相等,如果不相等的话那么就合并。

代码展示:

#include <iostream>
using namespace std;
#include <string>
int main()
{
 string s1 ;
 char s2;
 string s3 ;
 cout << "请输入原始数据" << endl;
 cin >> s1;
 cout << "请输入要删除元素:" << endl;
 cin >> s2;
 for (int i = 0; i < s1.length(); i++)
 {
   if (s1[i] !=s2) //如果不用strcmp函数,那么就只能一个是string 一个是char型.如果用strcmp,那么两个都需要是char类型的数组
   {
    s3 = s1[i] + s3;
   }
 }
cout << "删除后的元素为:" << s3 << endl;
 return 0;
}

第四篇 (回文数)

回文数,就是首尾一一对应相等的数就是回文数

整体思路:

首先我们要设置一个字符串,然后对其进行一个小于n/2的for循环,(因为是俩俩判定)。重要思路是首尾相减如果为0,那么就是回文数.

代码展示:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int i,n;
    string s;
    cout<<"请输入你要输入一个三位数数:"<<endl;
    cin>>s;
    n=s.length();
    for(i=0;i<n/2;i++)             //因为判断的是一对
    {
        if(s[i]-s[n-1-i]==NULL)    //因为相等所以相减为0;
        {
            cout<<"YES!"<<endl;
        }
        else
        {
            cout<<"NO"<<endl;
        }
    }
    return 0;
}
 

第五篇:(判断润年)

闰年是能够被四整除且不能被100整除,但能够被400整除的数

整体思路:

我们要知道闰年的条件,闰年是能够被四整除且不能被100整除,但能够被400整除的数

代码展示:

#include <iostream>
using namespace std;
int main()
{
 cout << "请输入您想判断的年份:" << endl;
 int year;
 cin >> year;
 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) //能够被整除4,但不能整除一百,但能整除400
 {
  cout << year << "是闰年" << endl;
 }
 else
 {
  cout << year << "不是闰年" << endl;
 }
 return 0;
}

网站公告

今日签到

点亮在社区的每一天
去签到