牛客网编程题python实现(一)--------华为2016研发工程师编程题

1.删数

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32M,其他语言64M

有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。
 

输入描述:

每组数据为一行一个整数n(小于等于1000),为数组成员数,如果大于1000,则对a[999]进行计算。

 

输出描述:

一行输出最后一个被删掉的数的原始下标位置。

 

输入例子1:

8

输出例子1:

6

 

代码实现:

import sys

for line in sys.stdin:
    n = int(line)
    if n > 1000:
        n = 1000
    a = [i for i in range(n)]
    i, deletes, k = -1, 0, 0
    while deletes < n:
        k = 0
        while k <= 2:
            i += 1
            i = i % n
            if a[i] == -1:
                continue
            k+=1
        a[i] = -1
        deletes += 1
    print(i)
        
    

[编程题]字符集合

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32M,其他语言64M

输入一个字符串,求出该字符串包含的字符集合
 

输入描述:

每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。

 

输出描述:

每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。

 

输入例子1:

abcqweracb

 

输出例子1:

abcqwer

 

代码实现:

import sys

for line in sys.stdin:
    d = {}
    s = ''
    for c in line:
        if c not in d and c != '\n':
            s += c
            d[c] = 1
    print(s)

 

[编程题]数独

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32M,其他语言64M

数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在有一些简单的数独题目,请编写一个程序求解。
 

输入描述:

输入9行,每行为空格隔开的9个数字,为0的地方就是需要填充的。

 

输出描述:

输出九行,每行九个空格隔开的数字,为解出的答案。

 

代码实现:

import sys
import copy

def check_results(results, i, j):
    row = results[i]
    for m in range(0, j):
        if row[m] == row[j]:
            return False

    for n in range(0, i):
        if results[n][j] == results[i][j]:
            return False

    k, l = i//3, j//3
    for m in range(k*3, i+1):
        for n in range(l*3, l*3+3):
            if m == i and n == j:
                return True
            if results[m][n] == results[i][j]:
                return False

    return True

def prt_results(results):
    for row in results:
        s = ''
        for col in row:
            s += ' ' + str(col)
        print(s)

def get_sd(a, i=0, j=0, results=None):
    if results is None:
        results = copy.deepcopy(a)

    if a[i][j] != 0:
        if j < 8:
            get_sd(a, i, j+1, results)
        elif i < 8:
            get_sd(a, i+1, 0, results)
        else:
            prt_results(results)
            sys.exit(0)
    else:
        for s in range(1, 10):
            results[i][j] = s
            if not check_results(results, i, j):
                continue
            else:
                if i == 8 and j == 8:
                    prt_results(results)
                    sys.exit(0)
                elif j < 8:
                    get_sd(a, i, j+1, results)
                elif i < 8:
                    get_sd(a, i+1, 0, results)
        results[i][j] = 0
    return results

if __name__ == "__main__":
    a=[[0 for _ in range(9)] for _ in range(9)]
    get_sd(a, 0, 0

你可能感兴趣的:(数据结构与算法,刷题记录)