分享一下今天公司组长给我们出的两个算法题

这篇博客探讨了两个Python编程问题:一是通过循环计算特定数字的序列和,如2+22+222+...;二是实现矩阵的旋转输出。博主提供了详细的代码实现,并展示了运行结果,得到了组长的认可。

1求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

我的思路:

  • 首先是想到要用到循环,循环的次数等于相加的个数(5),然后是要用的输入的数字num(2)乘10的i次方再相加得到每一项的值:

Python代码实现

count = int(input("please input count:"))
num=int(input("please input num"))
#当输入两位数的时候取余
if num>10:
    num=int(num/10)
    print("num=",num)
re=0
r=0
for i in range(count):
    re += num* 10 ** i
    r=r+re

    print('%d' % re,end='')
    if i<count-1:
     print('+',end='')

print('')
print('sum=',r)

运行结果

在这里插入图片描述

2是一个旋转输出题题目如图
这里是引用

在这里插入图片描述

我的思路

  • 旋转之后同一行的变成了同一列,所以做一个双层循环,交换位置,有个判断就是循环到最后一列的时候不能再交换了,因为第一次已经交换了,但总次数的最后一次当i=j=2时即最后一次交换是需要的

代码实现

matrix = \
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
#默认输出n=3,因为题中是一个n=3的二维数组
#n = int(input("please input n"))

n=3
for i in range(n):
    for j in range(n):
        #判断就是循环到最后一列的时候不能再交换了,
        if j<2:
           matrix[i][j], matrix[j][n - i-1] = matrix[j][n - i-1], matrix[i][j]
           #print(matrix)
        #总次数的最后一次当i=j=2时即最后一次交换是需要的
        if i==n-1&j==n-1:
           matrix[i][j], matrix[j][n - i-1] = matrix[j][n - i-1],matrix[i][j]
print(matrix)
print("矩阵输出")
print('[')
for i in range(n):
    print('[',end='')
    for j in range(n):
        if j<3:
           if j<2:
             print(matrix[i][j],end=',')
           else:
             print(matrix[i][j],end='')
    print(']',end='')
    if i<2 :
      print(',')
print('')
print(']')

运行结果

在这里插入图片描述
最后附上一张组长的点赞(哇吼)
在这里插入图片描述

### 回答1: 可以使用结构体来实现按照宽高排序,具体代码如下: ```c++ #include <iostream> #include <algorithm> using namespace std; struct Rectangle{ int length; int width; int height; }; bool cmp(Rectangle r1, Rectangle r2){ if(r1.width != r2.width){ return r1.width < r2.width; } else if(r1.height != r2.height){ return r1.height < r2.height; } else{ return r1.length < r2.length; } } int main(){ Rectangle rect[100]; // 输入数据 for(int i=0; i<100; i++){ cin >> rect[i].length >> rect[i].width >> rect[i].height; } // 排序 sort(rect, rect+100, cmp); // 输结果 for(int i=0; i<100; i++){ cout << rect[i].length << " " << rect[i].width << " " << rect[i].height << endl; } return 0; } ``` 其中,结构体 `Rectangle` 表示矩形,包括长度、宽度高度三个属性。函数 `cmp` 用来比较两个矩形的大小关系,按照宽度、高度、长度的顺序进行比较。使用 `sort` 函数对矩形数组进行排序,最后输排序后的结果。 ### 回答2: 根据题目所给条件,假设有100个组,每个组的长宽高都需要按照从小到大的顺序排序。为了便于解释,我们假设每个组的长宽高分别用三个数字表示。 首先,我们可以将所有组的长宽高存储在一个多维数组中,该数组的大小为100x3。每一行表示一个组,每一列分别代表该组的长、宽、高。 接下来,我们可以使用冒泡排序算法对每个组的长宽高进行排序。冒泡排序算法的基本思想是从第一个元素开始,依次比较相邻的两个元素的大小,并根据需要进行交换,直至最后一个元素。通过重复这一过程,可以确保最小的元素排在前面。 具体地,我们可以从第一组开始,依次遍历到第100组。对于每一组,我们从长、宽、高这三个数字中选取一个进行比较与交换。假设我们选择按照长来排序,那么我们首先比较第一组的长与第二组的长,如果第一组的长大于第二组的长,则交换这两个组的位置;接着再比较第二组的长与第三组的长,如果第二组的长大于第三组的长,则再次交换位置。以此类推,直至第100组。 当完成第一轮遍历后,我们可以确保最长的组已经排在最后。然后,我们进行第二轮遍历,但这次只需要遍历到倒数第二组即可。通过这样的多轮遍历,我们最终可以确保整个数组中的所有组的长都按照从小到大的顺序排列。 最后,我们将排好序的长宽高数组输即可得到100组长宽高按从小到大排序后的结果。 ### 回答3: 首先,我们需要清楚三个数值的大小关系,以便进行排序。然后,我们可以使用排序算法来按照从小到大的顺序对这100组长宽高进行排序。 一种可能的方法是使用冒泡排序。我们可以先比较前组的长宽高,如果前一组的长宽高大于后一组的长宽高,那么交换这组的位置。然后,我们继续比较第二组第三组的长宽高,继续进行交换操作,直到最后一组倒数第二组的长宽高比较完。这样一次冒泡排序,我们可以确保最大的一组长宽高已经排在了最后。 接下来,我们需要进行多次冒泡排序,重复进行前面的比较交换操作。每次冒泡排序,我们可以排好一组长宽高的顺序。所以,进行100组的排序,我们需要进行99次冒泡排序。 在每次冒泡排序中,我们不仅要比较长宽高的大小关系,还要将三个数值对应的组全都交换位置,以保持它们的一致性。这样,我们可以确保每组的长宽高都按照从小到大的顺序排列。 最终,经过99次冒泡排序操作,我们可以得到所有100组长宽高按从小到大的排序结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值