换抵挡装置(uva1588)

题意:给出两个长度分别为n1,n2(n1,n2<=100)且每列高度只为1或2的长条。需要将它们放入一个高度为3的容器,问能够容纳它们的最短容器长度。


image.png

案例输入输出如下:


image.png

这种题,想通就好做了。

思路:
1.将抽象换成具体数据表示
*长条用Int1数组表示,每一个值就是长条高度
*将两个长条放入一个高度为3的容器---->高度不能超过3---->长条数值相加不能大于3
*一开始起点一致的两个长条,如果不满足条件其中一个就要偏移,直到能插入为止,将其具体为数组坐标的偏移
2.将长条b视为固定不动,将长条a插入,如果不满足就偏移,程序表示为sliver_one[i+j],j是不满足条件时增加,直到所有都满足条件为止(如果两个长条完全不兼容,偏移量就是b长条的长度)

代码如下:

#include<iostream>
#include<string>
using namespace std;
int main(void)
{
    int i,j;
    int n1, n2;
    char char_sliver_one[50] = {'0'};
    char char_sliver_two[50] = {'0'};
    int sliver_one[50];
    int sliver_two[50];
    int flag;
    while (true)
    {       
        cin >> char_sliver_one >> char_sliver_two;
        n1 = strlen(char_sliver_one);
        n2 = strlen(char_sliver_two);
        j = 0;
        flag = 1;

        //循环遍历将字符转为数字存进数组
        for (i = 0; i < n1;i++)
            sliver_one[i] = char_sliver_one[i]-48;
        for (i = 0; i < n2; i++)
            sliver_two[i] = char_sliver_two[i]-48;

        while (j<n1&&flag>0)//如果flag==0,说明遍历之后没有一个不满足条件的
        {
            flag = 0;//一开始默认是成立的
            for (i=0;i<n2;i++)
            {
                if (sliver_one[i+j] + sliver_two[i] > 3)//遍历找是否有不满足条件的
                {                   
                    flag = 1;//如果确实不满足条件
                    j++;
                    break;
                }               
            }
        }
        if(n1 < n2+j) cout << "最小长度为:" << j + n2 << endl;
        else cout << "最小长度为:" << n1 << endl;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 4,088评论 0 2
  • 英文模式下的命令 代码功能 CR回车 ESC !设置打印方式 ESC %选择或取消用户自定义字符集 ESC &定义...
    NemoWei阅读 8,964评论 0 1
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,357评论 0 2
  • 50道经典Java编程练习题,将数学思维运用到编程中来。抱歉哈找不到文章的原贴了,有冒犯的麻烦知会声哈~ 1.指数...
    OSET我要编程阅读 7,304评论 0 9
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,306评论 0 52

友情链接更多精彩内容