计导 实验六

这篇博客探讨了编程中的几个关键问题,包括简单的编码和解码数组操作,数列的复原方法,以及蛇形矩阵和旋转矩阵的实现策略。解码时通过标志数组记录已使用元素,数列复原则采用逆向思维,从后向前遍历。对于矩阵操作,博客提到了根据坐标条件判断并填充元素的技巧,同时在字符串排序中需要注意 cin.getline 的使用细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编码、解码数组
在这里插入图片描述
大体思路:
编码十分简单,根据题意实现即可。解码较为复杂,需数组从后往前遍历实现。使用sign数组标记用过的数组,0为没用,1为用过。

#include<bits/stdc++.h>
using namespace std;
int n;int b[105];
void print(int*a)//输出数组
{
   
   
 int i;
 for (i = 0; i < n-1; i++)cout << a[i]<<" ";
 cout << a[n - 1] << endl;
}
void lock(int*a)//编码
{
   
   
 b[0] = 0; int i,j;
 for (i = 1; i < n; i++)
 {
   
   
  for (j = 0; j < i; j++)if (a[j] < a[i])b[i]++;
 }
 print(b);
}
void delock(int*a)//解码
{
   
   
 int i=0, j=0,k=0,cnt=0;
 int sign[105] = {
   
    0 };
 for (i = n - 1; i >= 0; i--)
 {
   
   
  //cout << "i=" << i << endl;
  j = 0; cnt = 0;
  if (a[i] == 0)//如果前面没有更小的数字,则b[i]存第一个sign为0的数
  {
   
   
   for (k = 0; k < n; k++)
   {
   
   
    if (sign[k] == 0){
   
   b[i] = k; break;}
   }sign[k] = 1;
  }
  else
  {
   
   
   while (cnt < a[i])
   {
   
   
    if (sign[j] == 0)cnt++;// cout << "cnt=" << cnt << endl;
    j++; //cout << "j=" << j << endl;
   }
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值