出租
出租
一、目的
-掌握sort的自定义用法
-掌握字符的转换
二、实验内容与设计思想
出租
下面是新浪微博上曾经很火的一张图:

一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对应 arr[0]=8,index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100。
本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。
输入格式:
输入在一行中给出一个由11位数字组成的手机号码。
输出格式:
为输入的号码生成代码的前两行,其中arr中的数字必须按递减顺序给出。
输入样例:
18013820100
输出样例:
int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};
题目分析:
看题目可知,代码量大概并不复杂,重点在于要记得转换字符并正确存储值,不重复存储
函数相关伪代码
1.string a;
2.vector<int> s1, s2;
3.输入题目中的arr
for (i = 0; i < a.length(); i++)
|p = a[i] - '0'
||for (s = 0; s < s1.size(); s++)
||if (s1[s] == p)
||| break
||if (s==s1.size())
|||s1.push_back(p)
4.sort(s1.begin(), s1.end(),compare)
5.compare自定义
6.输入题目中的index
for (i = 0;i < a.length();i++)
|p=a[i]-'0';
|for (s = 0;s < s1.size();s++)
||if (s1[s] == p)
|||break
|s2.push_back(s)
7.按格式输出
函数代码
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
bool compare(int a, int b) {
return a > b;
}
int main()
{
string a;
int i, s, l = 0,p;
cin >> a;
vector<int> s1, s2;
for (i = 0; i < a.length(); i++) {
p = a[i] - '0';
for (s = 0; s < s1.size(); s++) {
if (s1[s] == p) {
break;
}
}
if (s==s1.size()) {
s1.push_back(p);
}
}
sort(s1.begin(), s1.end(),compare);
for (i = 0;i < a.length();i++) {
p=a[i]-'0';
for (s = 0;s < s1.size();s++) {
if (s1[s] == p) {
break;
}
}
s2.push_back(s);
}
cout << "int[] arr = new int[]{";
for (i = 0;i < s1.size();i++) {
cout << s1[i];
if (i != s1.size() - 1) {
cout << ",";
}
}
cout << "};" << endl;
cout << "int[] index = new int[]{";
for (i = 0;i < s2.size();i++) {
cout << s2[i];
if (i != s2.size() - 1) {
cout << ",";
}
}
cout << "};" << endl;
return 0;
}
三、实验使用环境
以下请根据实际情况编写
- 操作系统:Windows 11专业版
- 编程语言:C++
- 开发工具:[Visual Studio 2022]
四、实验步骤和调试过程
出租
本机运行截图
![]()
五、实验小结
遇到的问题及解决方法:
- 问题:忘记要字符转换
- 解决方法:修改代码
实验体会和收获:
这段代码实现了从输入的字符串中提取出唯一的数字,并按照从大到小的顺序对s1排序,然后,它根据号码中每个数字在排序后的数组s1中的位置,生成一个数组s2,数组里的字符表示该号码在s1里面对应值的下标。
首先读取字符串,用vector<int>s1(也可以直接用int s1[9]来存储,但可能会造成空间浪费)来动态存储从输入的字符串中提取出唯一的数字,由于我采取的是字符串输入,我要先减‘0’使其变为int型,再进过判断s1中是否已经存入该数值来决定是否存入s1。如果我没有先减‘0’使其变为int型,在输出时我是直接输出数组元素,那么输出的会是其ASCII码上对应数值。
之后,要先对s1进行降序,才可以确定题目中存入s2中的元素。我直接用stl库中的sort函数来排序,但其是默认升序排列,我要降序排列,这需要我自定义排序规则。
最后,我根据排序后的s1数组来确定s2中的元素,按题目要求的格式输出。


浙公网安备 33010602011771号