【马蹄集】第二十三周——进位制专题

进位制专题



目录

  • MT2186 二进制?不同!
  • MT2187 excel的烦恼
  • MT2188 单条件和
  • MT2189 三进制计算机1
  • MT2190 三进制计算机2




MT2186 二进制?不同!

难度:黄金    时间限制:1秒    占用内存:128M
题目描述

小码哥是一个对数很敏感的人,即使给他很多个很像的数串,他都能找出没有出现过的数串。
或许是有些无聊,小码哥给你一个字符串数组 nums,里面包含 n n n 个二进制字符串(长度都为 n n n ),现请你找出不在数组中的二进制字符串。若有多解,返回对应十进制最小的一个。

格式

输入格式:一行二进制字符串数组,字符串之间以空格分割;
输出格式:一个不在数组中的二进制字符串。

样例 1

输入:01 10

输出:00

备注

其中: 1 ≤ n ≤ 16 1 \le n \le 16 1n16,nums中所有字符互不相同。


相关知识点:进位制


题解


本题要求找出尚未在输入数据中出现的最小值(所有数据的最小取值为 0)。但是题目给出的数据为二进制字符串(合法的),因此为了找出最小未出现的数,我们需要先将所有输入的二进制字符串转换为十进制数,并将这些数存放进一个集合 nums 中。接下来,从 0 开始逐步向后枚举整数,一旦存在某个数不在集合 nums 中,就说明这个数是尚未在输入数据中出现的最小数。注意:我们还需对这个数进行格式转换!即将这个数由十进制再转换为二进制字符串(长度需要和输入数据的长度一致)。

下面直接给出求解此题的完整代码(已 AC):

/*
    MT2186 二进制?不同! 
    测试数据:001 100 000  
*/
#include<bits/stdc++.h> 
using namespace std;

set<int> nums;

// 该函数将(合法的)二进制数字串转换为十进制数字 
int getDecFromBin(string str)
{
    int sum = 0, base = 1;
    for(int i=str.size()-1; i>=0; i--){
        sum += base*(str[i]-'0');
        base *= 2;
    }
    return sum;
} 

// 将一个十进制数转换为指定长度的二进制字符串
string toBinary(int n, int len)
{
    string str = "";
    while(len--){
        if(n&1) str = "1"+str;
        else str = "0"+str;
        n >>= 1;
    }
    return str;
} 

int main( )
{
    // 输入数据
    string str;
    while(cin>>str)
        nums.insert(getDecFromBin(str));
    // 记录当前输入二进制字符串的长度
    int binStrlen = str.length();
    // 寻找最小值,并在进行格式转换后输出 
    for(int i=0; ; i++){
    	// 找到一个尚未在集合中出现的最小数值
        if(nums.find(i) == nums.end()){
            cout<<toBinary(i, binStrlen)<<endl;
            break;
        }
    }
    return 0;
}



MT2187 excel的烦恼

难度:钻石    时间限制:2秒    占用内存:128M
题目描述

你用过 Excel 么?
在 excel 中,第一列被标为 A,第二列为 B,以此类推,第 26 列为 Z。接下来为由两个字母构成的列号:第 27 列为 AA,第 28 列为 AB……在标为 ZZ 的列之后则由三个字母构成列号,如此类推。
行号为从 1 开始的整数。
单元格的坐标由列号和行号连接而成。比如,BC23 表示位于第 55 列 23 行的单元格。
有时也会采用被称为 RXCY 的坐标系统,其中 X 与 Y 为整数,坐标 (X, Y) 直接描述了对应单元格的位置。比如,R23C55 即为前面所述的单元格。
小码哥请你编写一个程序,将所给的单元格坐标转换为另一种坐标系统下面的形式。

格式

输入格式:第一行一个整数 T(1≤T≤10^5) 表示将有 T 次询问;
     接下来 T 行,每行一个坐标。
输出格式:输出 T 行,每行一个被转换的坐标。

样例 1

输入:3
   R12C3
   AE32
   BB11

输出:C12
   R32C31
   R11C54

备注

每个坐标都是正确的。保证输入输出数据均在int范围内。输入输出数据字母部分均为大写。


相关知识点: 进位制


题解


这道题表面是在对两种坐标形式进行转换,但实际上也是在考察进制转换。例如,对于 excel 形式的坐标,其列号 BC 对应在十进制中为 55( 2 × 2 6 1 + 3 × 2 6 0 = 55 2×26^1+3×26^0=55 2×261+3×260=55),所以题中将 BC23 解析为第 55 行第 23 列的单元格。因此,这里的进制转换问题实际上是十进制与以 A − Z A-Z AZ 表达的二十六进制数之间的互相转换。

对于本题,由于输入数据并没有说明其具体是哪一种形式的坐标表达,因此我们需要做的第一件事是识别坐标格式。观察两种形式的坐标不难发现,excel 形式的坐标是 “字母+数字”,而 RXCY 形式的坐标是 “字母+数字+字母+数字”,这两种形式的本质区别在于:RXCY 的格式中,会在数字的后面出现字母;而 excel 形式下,数字后面不可能出现字母。因此可以根据这一本质区别进行格式识别,并在后续进行格式转换。

当完成了对输入坐标字符串的格式检测后,便能分别进行格式转换了。具体的转换过程并不难(详细细节可看这之后的例题:MT2189 三进制计算机1、MT2190 三进制计算机2),下面直接给出求解本题的完整代码(已 AC):

/*
	MT2187 excel的烦恼 
*/
#include<bits/stdc++.h> 
using namespace std;

string str;
int T;
char apt[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ";

// 检测当前的坐标字符串属于那种格式:
// 0 EXCEL 格式 
// 1 RXCY  格式
bool getFormat(string str)
{
	bool flag = 0;
	int strlen = str.length();
	for(int i=0; i<strlen; i++) {
		// 数字出现标记 
		if(isdigit(str[i]))
			flag = true;
		// 检测是否为 RXCY 模式
		if(flag && str[i]=='C')
			return true;
	}
	return false;
} 

// 格式转换 
void transform(string str)
{
	// 格式识别
	bool mode =  getFormat(str);
	// 格式转换 
	int row = 0, col = 0, len = str.length();
	if(mode){ // mode 1:RXCY 转 ECXCEL 格式 
		// 定位 R 与 C 所在位置 
		int R = str.find("R"), C = str.find("C");
		// 取出行号和列号 
		for(int i=R+1; i<C; i++) 
			row = row*10+str[i]-'0';
		for(int i=C+1; i<len; i++)
			col = col*10+str[i]-'0';
		// 将十进制数转换为以 A-Z 表达的二十六进制数 
		int tmp;
		string ans;
		while(col > 0){
			tmp = col%26;
			if(tmp == 0){
				tmp = 26;
				col -= 26;
			}
			ans += apt[tmp];
			col /= 26;
		} 
		reverse(ans.begin(), ans.end());
		// 格式化输出 
		cout<<ans<<row<<endl;
	}else{	// mode 0:ECXCEL 转 RXCY 格式 
		// 将二十六进制数转换为十进制数 
		for(int i=0; i<len; i++)
			if(!isdigit(str[i]))
				col = col*26+str[i]-'A'+1;
			else
				row = row*10+str[i]-'0';
		// 格式化输出 
		cout<<"R"<<row<<"C"<<col<<endl;
	}
}

int main( )
{
	// 输入数据
	cin>>T;
	for(int i=1; i<=T; i++){
		cin>>str;
		// 将当前的坐标表达式转换为另一种格式 
		transform(str);
	}
    return 0;
}


MT2188 单条件和

难度:黄金    时间限制:1秒    占用内存:128M
题目描述

“单条件” 是数理逻辑中的5种常用连接词之一,记作 “→”。它是二元运算。相当于 “如果…那么…. ”、“因为……所以……”、“只要…就.….” 等。也可称为 “蕴涵”。“p→q” 读作 “如果p,那么q”,其中 p 称为前件,q 称为后件。

其真值表如下:

单条件真值表

如 “异或和” 为 a 1 ⨁ a 2 ⨁ … ⨁ a n a_1⨁a_2⨁…⨁a_n a1a2an ,我们现在要求 “单条件和”,即 a 1 → a 2 → ⋯ → a n a_1→a_2→⋯→a_n a1a2an,对 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an 做位意义上的单条件运算求和。
请按 unsigned int 类型进行运算。

格式

输入格式:第一行一个整数 n n n,表示有 n n n 个需要求单条件和的整数;
     第二行输入 n n n 个需要求单条件和的整数。
输出格式:输出一个 unsigned int 型的整数。

样例 1

输入:10
   1 2 3 4 5 6 7 8 9 10

输出:4294967290

备注

对于100%的数据: 1 ≤ n ≤ 5 e 6 1≤n≤5e6 1n5e6


相关知识点:位运算


题解


观察题目给出的真值表不难发现:“p→q” 其实等价于执行位运算 “~p|q”(非 p 或 q)。在理解这一点后,我们便能直接写出以下代码:

/*
	MT2188 单条件和 
	用 scanf 接受输入才能得满分 
*/
#include<bits/stdc++.h> 
using namespace std;

int main( )
{
	// 输入数据
	int n;
	unsigned ans, tmp;
	cin>>n>>ans;
	// 执行运算
	for(int i=1; i<n; i++) {
		scanf("%u",&tmp);
		ans = ~ans | tmp;
	}
	// 输出 
	cout<<ans<<endl; 
    return 0;
}


MT2189 三进制计算机1

难度:黄金    时间限制:1秒    占用内存:128M
题目描述

三进制计算机,是以三进法数字系统为基础而发展的计算机。在光子计算机研究领域也有涉及。
三进制代码的一个特点是对称,即相反数的一致性,因此它和二进制代码不同,不存在无符号数的概念。这样,三进制计算机的架构也要简单、稳定、经济得多。其指令系统也更便于阅读,而且非常高效。
在一般情况下,命题不一定为真或假,还可能为未知。在三进制逻辑学中,符号 1 代表真;符号 -1 代表假;符号 0 代表未知。这种逻辑表达方式更符合计算机在人工智能方面的发展趋势,它为计算机的模糊运算和自主学习提供了可能。
在本题中,请你将输入的对称三进制数转换为对应的十进制数。对称三进制数不是用 0/1/2 表示,比较特殊,是用 1/0/-1 表示,故名对称。本题中 -1 用符号 - 表示,而 1 和 0 直接表示即可。

格式

输入格式:第一输入一个整数 n n n ,表示数据组数;
     接下来 n n n 行,每行输入一个对称三进制整数。
输出格式:对于第 2~n+1 行输入的每一个对称三进制整数,分别输出其十进制形式。

样例 1

输入:8
   -0
   -1
   -
   0
   1
   1-
   10
   1–

输出:-3
   -2
   -1
   0
   1
   2
   3
   5

备注

样例中 2 = 3 − 1 , 3 = 3 + 0 × 1 , 5 = 9 − 3 − 1 2=3-1,3=3+0 \times 1,5=9-3-1 2=313=3+0×15=931
对于100%的数据: 1 ≤ n ≤ 1 e 6 1≤n≤1e6 1n1e6,输入的对称三进制数对应的整数在 int 类型范围内


相关知识点:平衡三进制


题解


这道题实际上考察的是进制转换,即平衡三进制转换为十进制数。

首先我们要知道,任意 k k k 进制数(设为 A k = a 1 a 2 ⋯ a n A_k=a_1 a_2⋯a_n Ak=a1a2an)转换为十进制都遵循下式:

n = ∑ i = 1 n a i k n − i n=\sum_{i=1}^na_i k^{n-i} n=i=1naikni

其中, a i a_i ai 表示该 k k k 进制数在第 i i i 位上的取数, n n n 表示其长度。

例如,二进制数 1010 转换为十进制数为:

n = a 1 k 4 − 1 + a 2 k 4 − 2 + a 3 k 4 − 3 + a 4 k 4 − 4 = 1 × 2 3 + 0 × 2 2 + 1 × 2 1 + 0 × 2 0 = 10 n=a_1 k^{4-1}+a_2 k^{4-2}+a_3 k^{4-3}+a_4 k^{4-4}=1×2^3+0×2^2+1×2^1+0×2^0=10 n=a1k41+a2k42+a3k43+a4k44=1×23+0×22+1×21+0×20=10

十六进制数 AE86 转换为十进制数为:

n = a 1 k 4 − 1 + a 2 k 4 − 2 + a 3 k 4 − 3 + a 4 k 4 − 4 = 10 × 1 6 3 + 14 × 1 6 2 + 8 × 1 6 1 + 6 × 1 6 0 = 44678 n=a_1 k^{4-1}+a_2 k^{4-2}+a_3 k^{4-3}+a_4 k^{4-4}=10×16^3+14×16^2+8×16^1+6×16^0=44678 n=a1k41+a2k42+a3k43+a4k44=10×163+14×162+8×161+6×160=44678

同样地,三进制数也满足该式。但是本题比较特殊,因为平衡三进制数中的 2 会用 -1 来表示,但这并不影响通式给出的计算方法。例如,对于题目给出的平衡三进制数:1--,其转换过程如下:

n = a 1 k 3 − 1 + a 2 k 3 − 2 + a 3 k 3 − 3 = 1 × 3 2 + ( − 1 ) × 3 1 + ( − 1 ) × 3 0 = 9 − 3 − 1 = 5 n=a_1 k^{3-1}+a_2 k^{3-2}+a_3 k^{3-3}=1×3^2+(-1)×3^1+(-1)×3^0=9-3-1=5 n=a1k31+a2k32+a3k33=1×32+(1)×31+(1)×30=931=5

根据这样的思路,可写出求解本题的完整代码:

下面给出基于以上思路写出的完整代码(已 AC):

/*
    MT2189 三进制计算机1  
    输出转换结果时不能用 endl ,否则会超时 
*/
#include<bits/stdc++.h> 
using namespace std;

const int N = 105;
int w[N], n, ans, len;
char s[N];

int main( )
{
    // 取消cin与stdin的同步(加速文件读取速度) 
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    // 输入数据
    cin>>n; 
    
    // 构建乘位 
    w[0] = 1;
    for(int i=1; i<=100; i++)
        w[i] = w[i-1]*3;
            
    // 进制转换与输出 
    while(n--){
        cin>>s;
        ans = 0;
        len = strlen(s);
        // 进制转换 
        for(int i=len-1; i>=0; i--){
            if(s[i] == '1') ans += w[len-1-i];
            if(s[i] == '-') ans -= w[len-1-i];
        }
        // 输出转换结果
        cout<<ans<<"\n";
    }
    return 0;
}

此外,对本题而言还需要特别注意两点:

  1. 必须取消 cin 与 stdin 的同步以加速文件读取速度,否则会超时(原理请见:C++中输入和输出的一些问题);
  2. 输出换行时必须用 “\n” 替代 “endl”,否则会超时。

当然,你也可以用 C 的方式进行数据输入输出(即用scanf和printf替代cin和cout),这样就不必担心上面的这些问题。



MT2190 三进制计算机2

难度:钻石    时间限制:1秒    占用内存:128M
题目描述

三进制计算机,是以三进法数字系统为基础而发展的计算机。在光子计算机研究领域也有涉及。
三进制代码的一个特点是对称,即相反数的一致性,因此它和二进制代码不同,不存在无符号数的概念。这样,三进制计算机的架构也要简单、稳定、经济得多。其指令系统也更便于阅读,而且非常高效。
在一般情况下,命题不一定为真或假,还可能为未知。在三进制逻辑学中,符号 1 代表真;符号 -1 代表假;符号 0 代表未知。这种逻辑表达方式更符合计算机在人工智能方面的发展趋势,它为计算机的模糊运算和自主学习提供了可能。
在本题中,请你将输入的对称三进制数转换为对应的十进制数。对称三进制数不是用 0/1/2 表示,比较特殊,是用 1/0/-1 表示,故名对称。本题中 -1 用符号 - 表示,而 1 和 0 直接表示即可。

格式

输入格式:第一输入一个整数 n n n ,表示数据组数;
     接下来 n n n 行,每行输入一个十进制整数。
输出格式:对于第 2~n+1 行输入的每一个十进制整数,分别输出其对称三进制形式。

样例 1

输入:8
   -3
   -2
   -1
   0
   1
   2
   3
   5

输出:-3
   -0
   -1
   -
   0
   1
   1-
   10
   1–

备注

样例中 2 = 3 − 1 , 3 = 3 + 0 × 1 , 5 = 9 − 3 − 1 2=3-1,3=3+0 \times 1,5=9-3-1 2=313=3+0×15=931
对于100%的数据: 1 ≤ n ≤ 1 e 6 1≤n≤1e6 1n1e6,输入的对称三进制数对应的整数在 int 类型范围内


相关知识点:平衡三进制


题解


这道题与前一题的要求刚好相反,即要求将输入的每个十进制数转换为对称三进制数并输出。
首先我们要知道,任意十进制数 n n n 转换为 k k k 进制都遵循一个过程:

  1. 当前位取数为:n%k;
  2. 为继续向后取数(即得到更高位的数),更新数 n = n k n=\frac{n}{k} n=kn
  3. 若 n = 0 ,则转换结束。

例如,将十进制数 10 转换为二进制数的过程如下:

  • 第1位: n % 2 = 10 % 2 = 0 n\%2 = 10\%2 = 0 n%2=10%2=0,更新 n = n 2 = 10 2 = 5 n=\frac{n}{2}=\frac{10}{2}=5 n=2n=210=5
  • 第2位: n % 2 = 5 % 2 = 1 n\%2 = 5\%2 = 1 n%2=5%2=1,更新 n = n 2 = 5 2 = 2 n=\frac{n}{2}=\frac{5}{2}=2 n=2n=25=2
  • 第3位: n % 2 = 2 % 2 = 0 n\%2 = 2\%2 = 0 n%2=2%2=0,更新 n = n 2 = 2 2 = 1 n=\frac{n}{2}=\frac{2}{2}=1 n=2n=22=1
  • 第4位: n % 2 = 1 % 2 = 1 n\%2 = 1\%2 = 1 n%2=1%2=1,更新 n = n 2 = 1 2 = 0 n=\frac{n}{2}=\frac{1}{2}=0 n=2n=21=0,转换结束。

于是得到十进制数 10 对应的二进制数为 1010。

同样地,将十进制数转换为三进制数也遵循该算法,例如,将十进制数 11 转换为三进制数的过程如下:

  • 第1位: n % 3 = 11 % 3 = 2 n\%3 = 11\%3 = 2 n%3=11%3=2,更新 n = n 3 = 11 3 = 3 n=\frac{n}{3}=\frac{11}{3}=3 n=3n=311=3
  • 第2位: n % 3 = 3 % 3 = 0 n\%3 = 3\%3 = 0 n%3=3%3=0,更新 n = n 3 = 3 3 = 1 n=\frac{n}{3}=\frac{3}{3}=1 n=3n=33=1
  • 第3位: n % 3 = 1 % 3 = 1 n\%3 = 1\%3 = 1 n%3=1%3=1,更新 n = n 3 = 1 3 = 0 n=\frac{n}{3}=\frac{1}{3}=0 n=3n=31=0,转换结束。

于是得到十进制数 11 对应的三进制数为 102。

而本题要求转换的 “平衡三进制” 中,所有的 “2” 都要求用 “-1” 来替代。这一替换实际上相当于将指定位上的值减少了 1(从这个数的整体来看,实际上减少了 1 × k p 1×k^p 1×kp),为了保证这个数在整体上的值不变,就必须向前一位借位,即将这个位前的那个值加 1。例如,由十进制数 11 得到的三进制数为 102,我们从该数的低位向高位扫描:首先,末尾存在一个 “2”,于是将这个数替换为 “-”,并将较高位的 “0” 替换为 “1”(即得到 11-);接继续向后扫描,发现整个序列中的数均合法,于是得到由十进制数 11 转换的平衡三进制数为 11-。我们可以进行验证:

n = a 1 k 3 − 1 + a 2 k 3 − 2 + a 3 k 3 − 3 = 1 × 3 2 + 1 × 3 1 + ( − 1 ) × 3 0 = 9 + 3 − 1 = 11 n=a_1 k^{3-1}+a_2 k^{3-2}+a_3 k^{3-3}=1×3^2+1×3^1+(-1)×3^0=9+3-1=11 n=a1k31+a2k32+a3k33=1×32+1×31+(1)×30=9+31=11

考虑一种情况,三进制数 122。当将末位的 “2” 借位后,中间位的 “2” 将变成数字 “3”,即此时为 13-;对中间位而言,“3” 已经达到了这个进制下的最大值,因此要进位,于是此时该数将变为 20-;继续向高位扫描,发现最高位为 “2”,因此需要将其转换为 “-”,并向较高位借位,故最终得到 1-0-。我们可以进行验算:

122 : n = 1 × 3 2 + 2 × 3 1 + 2 × 3 0 = 9 + 6 + 2 = 17 122:n=1×3^2+2×3^1+2×3^0=9+6+2=17 122n=1×32+2×31+2×30=9+6+2=17
1 − 0 − : n = 1 × 3 3 + ( − 1 ) × 3 2 + 0 × 3 1 + ( − 1 ) × 3 0 = 17 1-0-:n=1×3^3+(-1)×3^2+0×3^1+(-1)×3^0=17 10n=1×33+(1)×32+0×31+(1)×30=17

可以看出,他们最终转换为十进制均为 17。

最后还需要注意一点:平衡三进制的负数与正数之间的转换关系。实际上,题目也给出了他们之间关系的一些提示:“三进制代码的一个特点是对称,即相反数的一致性”。对于平衡三进制的数而言,它的相反数与其本身的关系如下:所有非 0 数据互相相反。例如,平衡三进制数 1-01,它对应的负数则为 -10-

1 − 01 : n = 1 × 3 3 + ( − 1 ) × 3 2 + 0 × 3 1 + 1 × 3 0 = 27 − 9 + 0 + 1 = 19 1-01:n=1×3^3+(-1)×3^2+0×3^1+1×3^0=27-9+0+1=19 101n=1×33+(1)×32+0×31+1×30=279+0+1=19
− 10 − : n = ( − 1 ) × 3 3 + 1 × 3 2 + 0 × 3 1 + ( − 1 ) × 3 0 = − 27 + 9 + 0 − 1 = − 19 -10-:n=(-1)×3^3+1×3^2+0×3^1+(-1)×3^0=-27+9+0-1=-19 10n=(1)×33+1×32+0×31+(1)×30=27+9+01=19

根据上面的分析,可以将求解本题的思路整理如下:

  1. 将输入的十进制数转换为对应的三进制数(为便于处理,这一阶段将统一使用该数的正数);
  2. 将三进制数转换为平衡三进制数,转换规则如下(假设当前的三进制数字符串为num):
    • 若 num[i] = 2,则令 num[i] = -, num[i+1]++(数字串的索引大小与数的低位到高位对应);
    • 若 num[i] = 3,则令 num[i] = 0, num[i+1]++。
  3. 根据输入十进制数的正负性,对得到的平衡三进制数进行相应处理。

下面给出基于以上思路得到的完整代码(已 AC):

/*
	MT2190 三进制计算机2  
	思路:先将数从十进制转换至正常的三进制,然后再转换为平衡三进制 
*/
#include<bits/stdc++.h> 
using namespace std;

const int N = 55;
int num[N], n, x, flag, cnt;

int main( )
{
	// 取消cin与stdin的同步(加速文件读取速度) 
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	// 输入数据
	cin>>n; 
	while(n--){
		cin>>x;
		memset(num, 0, sizeof(num));
		flag = 1, cnt = 0;
		// 程序将统一处理正数,因此定义标记来记录原始输入数据的正负性 
		if(x<0){
			flag = -1;
			x = -x;
		}
		if(x == 0){
			cout<<x<<"\n";
			continue;
		} 
		// 将十进制数转换为三进制数 
		while(x){
			num[cnt++] = x%3;
			x /= 3;
		}
		// 将三进制数转换为平衡三进制数 
		for(int i=0; i<cnt; i++){
			if(num[i] == 2){
				// 借位 
				num[i] = -1;
				num[i+1]++;
			}else if(num[i] == 3){
				// 进位 
				num[i] = 0;
				num[i+1]++; 
			}
		}
		// 判断原始三进制数转换为平衡三进制数后是否出现了位增情况 
		if(num[cnt]) cnt++;
		// 如果原始输入的十进制数为负数,则需要对已经算出的平衡三进制数进行反号 
		if(flag == -1) 
			for(int i=cnt-1; i>=0; i--)
				num[i] = -num[i];
		// 输出转换后的平衡三进制数,需要进行格式控制:所有的-1都输出- 
		for(int i=cnt-1; i>=0; i--)
			if(num[i] == -1) cout<<"-";
			else cout<<num[i];
		cout<<"\n";
	}
	
    return 0;
}

END


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/80480.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

推荐一个绘图平台(可替代Visio)

不废话&#xff0c;简易记网址&#xff1a; draw.io 网站会重定向到&#xff1a;https://app.diagrams.net/

《TCP IP网络编程》第十八章

第 18 章 多线程服务器端的实现 18.1 理解线程的概念 线程背景&#xff1a; 第 10 章介绍了多进程服务端的实现方法。多进程模型与 select 和 epoll 相比的确有自身的优点&#xff0c;但同时也有问题。如前所述&#xff0c;创建&#xff08;复制&#xff09;进程的工作本身会…

【leetcode 力扣刷题】旋转矩阵(循环过程边界控制)

力扣刷题 旋转矩阵 二维矩阵按圈遍历&#xff08;顺时针 or 逆时针&#xff09;遍历59. 旋转矩阵Ⅱ54. 旋转矩阵剑指 Offer 29. 顺时针打印矩阵 二维矩阵按圈遍历&#xff08;顺时针 or 逆时针&#xff09;遍历 下面的题目的主要考察点都是&#xff0c;二维数组从左上角开始顺…

【Nginx18】Nginx学习:WebDav文件存储与图片媒体处理模块

Nginx学习&#xff1a;WebDav文件存储与图片媒体处理模块 今天的内容怎么说呢&#xff1f;有两个感觉非常有意思&#xff0c;另外一些就差点意思。有意思的是&#xff0c;咱们可以直接用 Nginx 的 Webdav 功能搭建一个网盘&#xff0c;另外也可以实现动态的图片处理。这两个功能…

MyBatis的入门级环境搭建及增删改查,详细易懂

目录 一.mybatis的简介 二.MyBatis的环境搭建 2.1 导入pom依赖 2.2 数据库文件导入连接 2.3 修改web.xml文件 2.4 安装插件 2.5 配置文件 2.5.1 mybatis.cfg.xml文件 2.5.2 generatorConfig.xml文件 2.6 最后测试生成代码 三.MyBatis的增删改查 3.1 写service类&#xff…

CSS3:图片边框

简介 图片也可以作为边框&#xff0c;以下是实例演示 注意 实现该效果必须添加border样式&#xff0c;且必须位于border-image-socure之前否则不会生效 实例 <html lang"en"><head><style>p {width: 600px;margin: 200px auto;border: 30px soli…

CSS 背景属性

前言 背景属性 属性说明background-color背景颜色background-image背景图background-repeat背景图平铺方式background-position背景图位置background-size背景图缩放background-attachment背景图固定background背景复合属性 背景颜色 可以使用background-color属性来设置背景…

【vue】项目基础环境搭建、css样式重置与公用

nodejs环境 nodejs是当下前端工程化开发必不可少的环境, 使用 nodejs的 npm功能来管理依赖包 查看node 和 npm的版本 node -v #查看node版本npm -v #查看npm版本 git版本控制 git版本控制工具是目前最为流行的分布式版本管理工具,代码的**提交, 检出, 日志**, 都需要通过git完…

17-工程化开发 脚手架 Vue CLI

开发Vue的两种方式: 1.核心包传统开发模式: 基于 html/css /js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。 2.工程化开发模式: 基于构建工具 (例如: webpack)的环境中开发 Vue。 问题: 1. webpack 配置不简单 2. 雷同的基础配置 3. 缺乏统…

Python几何计算库读取几何,点线面要素游标搜索

Python几何计算库读取几何&#xff0c;点线面要素游标搜索 一、读取几何 要素类中的每个要素都包含一组用于定义面或线折点的点要素&#xff0c;或者包含单个用于定义一个点要素的坐标。可以使用几何对象&#xff08; 面 Polygon、 折线 Polyline、 点几何 PointGeometry 或 多…

技术分享| WebRTC之SDP详解

一&#xff0c;什么是SDP WebRTC 是 Web Real-Time Communication&#xff0c;即网页实时通信的缩写&#xff0c;是 RTC 协议的一种Web实现&#xff0c;项目由 Google 开源&#xff0c;并和 IETF 和 W3C 制定了行业标准。 WebRTC是点对点通讯&#xff0c;他的通话建立需要交换…

Excelize Go语言操作 Office Excel文档基础库

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库&#xff0c;基于 ECMA-376&#xff0c;ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&#xf…

centos安装elasticsearch7.9

安装es 下载elasticsearch安装包解压安装包,并修改配置文件解压进入目录修改配置文件 添加用户&#xff0c;并修改所有者切换用户&#xff0c;运行es如何迁移旧版本的数据 下载elasticsearch安装包 下载地址如下&#xff0c;版本号可以替换成自己想要的。 这里需要注意一点&am…

Bigemap Pro国产基础软件介绍——一款多源数据处理软件

一、软件简介 Bigemap Pro是由成都比格图数据处理有限公司(下称”BIGEMAP”)开发和发行的国产大数据处理基础软件。Bigemap Pro是在BIGEMAP GIS Office基础上&#xff0c;经过十年的用户积累与反馈和技术更新迭代出的新一代基础软件产品。Bigemap Pro国产基础软件集成了数据采…

WebRTC | ICE详解

目录 一、Candidate种类与优先级 二、ICE策略 1. iceServers 2. iceTransportPolicy 三、P2P连接 1.Nat类型 &#xff08;1&#xff09;完全锥型NAT &#xff08;2&#xff09;IP限制锥型NAT &#xff08;3&#xff09;端口限制锥型NAT &#xff08;4&#xff09;对称…

UE5.2 LyraDemo源码阅读笔记(五)输入系统

Lyra里使用了增强输入系统&#xff0c;首先知道增强输入系统里的三个类型配置。 一、Input Actions (IA)&#xff1a; 输入操作带来的变量&#xff0c;与玩家的输入组件绑定&#xff0c;回调里驱动玩家行为。 二、InputMappingContext&#xff08;IMC&#xff09;&#xff1a…

现有的vue3+ts+vite项目集成electron

效果图 什么时Electron Electron是使用JavaScript,HTML和CSS构建跨平台的桌面应用程序框架。 Electron兼容Mac、Windows和Linux,可以构建出三个平台的应用程序。 现有的vue3项目集成Electron 安装依赖 原来有一个vue3+ts+vite+pnpm的项目,其中sub-modules是子项目,web是…

【C语言】字符函数和字符串函数

目录 1.求字符串长度strlen 2.长度不受限制的字符串函数 字符串拷贝strcpy 字符串追加strcat 字符串比较strcmp 3.长度受限制的字符串函数介绍strncpy strncat ​编辑strncmp 4.字符串查找strstr 5.字符串分割strtok 6.错误信息报告 strerror perror 7.字符分类函…

激活函数总结(十三):Tanh系列激活函数补充(LeCun Tanh、TanhExp)

激活函数总结&#xff08;十三&#xff09;&#xff1a;Tanh系列激活函数补充 1 引言2 激活函数2.1 LeCun Tanh激活函数2.2 TanhExp激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、ELU、SELU、GELU、…

Linux服务器性能、网络监控

参考 1.Linux监控指令 2.Linux服务器上监控网络带宽的18个常用命令和linux带宽流量监控查看工具 3.Linux top指令 文章目录 Linux 命令行工具总体性能监控网络监控网络监控iftop磁盘IO使用情况和性能分析 iostat Linux 命令行工具 总体性能监控 $ top直接输入 top&#xff0c;…