首页 > 其他分享 >山东大学数据结构实验一(2)

山东大学数据结构实验一(2)

时间:2023-04-25 20:24:50浏览次数:44  
标签:int oplus2 oplus1 oplus3 实验 array 数据结构 山东大学 sum

题目描述

现有一个有n 个元素的序列 \(a = [a_{1}, a_{2}, \cdots , a_{n}]\),定义其价值为 \(\sum_{i=1}^{n}a_{i} \oplus i\)
给出这样一个序列,求其所有排列的价值 \(v_{i}\) 的或 \(v_{1}| v_{2} | \cdots | v_{n-1} | v_{n}\)
其中 \(|\) 为位运算或操作,\(\oplus\) 为位运算异或操作

题目格式

输入

输入的第一行是一个整数 n (2<=n<=10),表示需排列的数的个数。接下来一行是 n 个整数,数的范围是 0 到 100000,每两个相邻数据间用一个空格分隔。

输出

一个整数,代表所有排列价值的或。

样例1

输入

3
1 2 3

输出

6

提示

3 的全排列有
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
对应的价值为
\(1\oplus1+2\oplus2+3\oplus3=0\)
\(1\oplus1+3\oplus2+2\oplus3=2\)
\(2\oplus1+1\oplus2+3\oplus3=6\)
\(2\oplus1+3\oplus2+1\oplus3=6\)
\(3\oplus1+1\oplus2+2\oplus3=6\)
\(3\oplus1+2\oplus2+1\oplus3=4\)
其所有价值的或为
\(0 | 2 | 6 | 6 | 6 | 4 = 6\)

/* created by LYZ */
#include<iostream>
using namespace std;

int value = 0;
void swap(int &a, int &b){
	int u = a;
	a = b;
	b = u;

}
int fullPermutation(int *array, int n, int m){//从n到m进行全排列 n是当前的位置 m是结尾的位置
	int sum = 0;
	if (n < m){
		for (int i = n; i < m; i++){
			{ swap(array[i], array[n]);
			}//交换i和n位置的数,让i位置的数作为下次全排列的头部
			fullPermutation(array, n + 1, m);//对n+1后的数进行全排列
			{ swap(array[i], array[n]);
			};//把刚刚交换的数交换回来
		}
	}
	if (n == m){//排列完成

		for (int i = 0; i < m; i++){
			sum += (array[i] ^ (i + 1));//确定异或价值的和
		}
		value |= sum;//进行或运算
	}
	return value;

}


int main(){

	int n;
	cin >> n;
	int a[20];
	for (int i = 0; i < n; i++)
		cin >> a[i];
	cout << fullPermutation(a, 0, n) << endl;


	return 0;
}

标签:int,oplus2,oplus1,oplus3,实验,array,数据结构,山东大学,sum
From: https://www.cnblogs.com/lyz103/p/17353707.html

相关文章

  • 山东大学数据结构实验一(1)
    题目描述现有一个有\(n\)个元素的序列\(a=[a_1,a_2,\cdots,a_n]\),定义这个序列的价值为\(\sum_{i=1}^{n}i\timesa_i\)。空序列的价值为\(0\)。先给你一个长度为\(n\)的序列\(a\),求\(a\)中所有子集价值的异或和,要求子集中元素的相对位置保持不变。异或和:位运算的一种。如果a......
  • 实验三
    任务一实验源码运行结果截图任务二实验源码1lst=[55,92,88,79,96]23i=04whilei<len(lst):5print(lst[i],end='')6i+=17print()89foriinrange(len(lst)):10print(lst[i],end='')11print()1213forii......
  • 实验3 控制语句与组合数据类型应用编程
    实验任务1实验源码1importrandom23print('用列表存储随机整数:')4lst=[random.randint(0,100)foriinrange(5)]5print(lst)67print('\n用集合存储随机整数:')8s1={random.randint(0,100)foriinrange(5)}9print(s1)1011print('......
  • 实验3
    1.实验任务1task1.py实验代码:importrandomprint('用列表储存随机整数:')lst=[random.randint(0,100)foriinrange(5)]print(lst)print('\n用集合储存随机整数:')s1={random.randint(0,100)foriinrange(5)}print(s1)print('\n用集合储存随机整数:')s......
  • 实验3
    实验任务1:源码:importrandomprint('用列表存储随机整数:')lst=[random.randint(0,100)foriinrange(5)]print(lst)print('\n用集合存储随机整数:')s1={random.randint(0,100)foriinrange(5)}print(s1)print('\n用集合存储随机整数:')s2=set(......
  • 实验三
    实验任务一:实验源码:1importrandom23print('用列表存储随机整数:')4lst=[random.randint(0,100)foriinrange(5)]5print(lst)67print('\n用集合存储随机整数:')8s1={random.randint(0,100)foriinrange(5)}9print(s1)1011print('\......
  • 实验三
    task1源代码importrandomprint('用列表存储随机整数:')lst=[random.randint(0,100)foriinrange(5)]print(lst)print('\n用集合存储随机整数:')s1={random.randint(0,100)foriinrange(5)}print(s1)print('\n用集合存储随机整数:')s2=set()whilelen(......
  • 实验3 控制语句与组合数据类型应用编程
    一.实验目的:1.知道Python中组合数据类型字符串(str)、列表(list)、元组(tuple)、集合(set)、字典的表示、特性2.能够正确、熟练使用字符串(str)、列表(list)、元组(tuple)、集合(set)、字典的常用操作3.针对具体问题场景,能够灵活、组合使用多种数据类型,应用或设计算法,使用......
  • 实验3
    实验任务1源代码:importrandomprint('用列表存储随机整数:')lst=[random.randint(0,100)foriinrange(5)]print(lst)print('\n用集合存储随机整数:')s1={random.randint(0,100)foriinrange(5)}print(s1)print('\n用集合存储随机整数:')s2=set()whil......
  • linux操作系统分析实验五-深入理解进程切换
    Lab5:深入理解进程切换首先找到对应进程调度的代码文件Kernal/sched/core.c  找到context_switch()函数   其中包括rq,为进程的runningqueue;以及进程切换前后的进程描述符prev和next  首先调用一些函数做上下文切换的准备,与最后出现的finish_task_switch()成......