1. 如上所示,由正整数1,2,3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。
比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。
输入:
输入数据包括多行,每行给出一组测试数据,包括两个整数m,n (1 <= m <= n <= 1000000000)。最后一组测试数据中包括两个0,表示输入的结束,这组数据不用处理。
输出:
对于每一组测试数据,输出一行,该行包含一个整数,给出结点m所在子树中包括的结点的数目
样例输入:
3 7 142 6574 2 754 0 0样例输出:
3 63 498
def tree_count(n, m):
global sum
if m <= n:
sum += 1
tree_count(n, m*2)
tree_count(n, m*2+1)
else:
return
while(True):
sum = 0
m, n = map(int, input().split(' '))
if n == 0 and m == 0:
break
tree_count(n, m)
print(sum)
2.求一个3×3的整型矩阵对角线元素之和。
输入
从键盘上输入3×3的整型矩阵,要求输入3行,每行3个整数,每个数之间以空格分隔
输出
对角线元素之和,行尾换行
list1 = []
list = []
sum = 0
for i in range(0,3):
list1 = input().split(" ")
list.append(list1)
for i in range(0,3):
sum += int(list[i][i])
print(sum)
3.从键盘上输入10个整数,按照从小到大的顺序对这10个数排序。
采用选择法进行排序。
提示:
选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。
基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。以下为简单选择排序的存储状态,其中大括号内为无序区,大括号外为有序序列:
初始序列:{ 49 27 65 97 76 12 38 }
第1趟:12与49交换:12 { 27 65 97 76 49 38 }
第2趟:27不动 :12 27 { 65 97 76 49 38 }
第3趟:65与38交换:12 27 38 { 97 76 49 65 }
第4趟:97与49交换:12 27 38 49 { 76 97 65 }
第5趟:76与65交换:12 27 38 49 65 { 97 76 }
第6趟:97与76交换:12 27 38 49 65 76 97 完成
注意C语言数组的下标是从0开始的。
输入
输入以空格分隔的10个整数
输出
按从小到大排好序的10个数,每个数一行。
list = map(int, input().split(" "))
nums = []
for i in list:
nums.append(i)
for i in range(0,len(nums)):
for j in range(i, len(nums)):
if(nums[i] > nums[j]):
temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
for each in nums:
print(each)