牛客网——2017校招真题在线编程(python&C++)

牛客网——2017校招真题在线编程(python&C++)

1、n个数里的最小k个

题目描述

找出n个数里最小的k个

输入描述:

每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n
不超过100。

输出描述:

输出n个整数里最小的k个数。升序输出
示例1

输入

3 9 6 8 -10 7 -11 19 30 12 23 5

输出

-11 -10 3 6 7

python3:

def findminK(arr,K):
    res = sorted(arr)
    return res[:K]

if __name__ == "__main__":
    try:
        while True:
            arr = [int(t) for t in input("").split()]
            print(" ".join(str(i) for i in findminK(arr[:-1],arr[-1]))) 
    except:
        pass

2、求数列的和

题目描述

数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。

输入描述:

输入数据有多组,每组占一行,由两个整数n(n < 10000)和m(m < 1000)组成,n和m的含义如前所述。

输出描述:

对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。
示例1

输入

81 4
2 2

输出

94.73
3.41

Python代码:

import sys
import math

def getSum(num1, num2):
    sum = 0
    if num1 < 0 or num1 >= 10000:
        return sum
    if num1 == 0:
        return sum
    if num2 <= 0 or num2 >= 1000:
        return -1
    if (num1 > 0 and num1 < 10000) and (num2 > 0 and num2 < 1000):
        sum = num1
        for i in range(num2-1):
            sum = sum + math.sqrt(num1)
            num1 = math.sqrt(num1)
    return sum

if __name__ == '__main__':
    try:
        while True:
            arr1 = [int(t) for t in sys.stdin.readline().split()]
            arr2 = [int(t) for t in sys.stdin.readline().split()]
            print("%.2f" % getSum(arr1[0], arr1[1]))
            print("%.2f" % getSum(arr2[0], arr2[1]))
    except:
        pass

3、水仙花数,见博客:在线编程——水仙花数

4、分苹果

题目描述

n 只奶牛坐在一排,每个奶牛拥有 a i 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。

输入描述:

每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。

输出描述:

输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。
示例1

输入

4
7 15 9 5

输出

3

C++代码:

#include <iostream>
 
using namespace std;
 
int main()
{
    int num;
    cin>>num;
    int a[num];
    long long sum = 0,count = 0;
    for(int i=0;i<num;i++){
        cin>>a[i];
        sum += a[i];
    }
    bool flag = true;
    if(sum%num == 0){
        int average = sum/num;
        for(int i=0;i<num;i++){
            if(a[i] > average){
                if((a[i]-average)%2 == 0){
                    count += (a[i]-average)/2;
                }
                else{
                    flag = false;
                    break;
                }
            }
        }
    }
    else
        flag = false;
 
    if(flag){
        cout<<count<<endl;
    }
    else
        cout<<"-1"<<endl;
 
    return 0;
}

5、数字翻转

题目描述

对于一个整数X,定义操作rev(X)为将X按数位翻转过来,并且去除掉前导0。例如:
如果 X = 123,则rev(X) = 321;
如果 X = 100,则rev(X) = 1.
现在给出整数x和y,要求rev(rev(x) + rev(y))为多少?

输入描述:

输入为一行,x、y(1 ≤ x、y ≤ 1000),以空格隔开。

输出描述:

输出rev(rev(x) + rev(y))的值
示例1

输入

123 100

输出

223

python代码:

def rev(num):
    tmp = []
    sum = 0
    for i in range(len(str(num))):
        tmp.append(num//pow(10,i)%10)
        sorted(tmp)
    for i in range(len(tmp)):
        sum += tmp[len(tmp)-i-1]*pow(10,i)
    return sum

if __name__=='__main__':
    try:
        while True:
            arr = [int(t) for t in input('').split()]
            print(rev(rev(arr[0])+rev(arr[1])))
    except:
        pass

6、n个数里出现次数大于等于n/2的数

题目描述

输入n个整数,输出出现次数大于等于数组长度一半的数。

输入描述:

每个测试输入包含 n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2。

输出描述:

输出出现次数大于等于n/2的数。
示例1

输入

3 9 3 2 5 6 7 3 2 3 3 3

输出

3

python3代码:

def getCondNumber(arr):
    res = []
    if len(arr)==1:
        res.append(arr[0])
        return res

    sorted(arr) #排序
    arr1 = list(set(arr)) #去重复

    for i in range(len(arr1)):
        count = 0
        for j in range(len(arr)):
            if arr1[i]==arr[j]:
                count+=1
        if count>=len(arr)/2:
            res.append(arr1[i])
    return res

if __name__=='__main__':
    try:
        while True:
            arr = [int(t) for t in input('').split()]
            res = getCondNumber(arr)
            print(" ".join(str(i) for i in res))
    except:
        pass

7、素数对

题目描述

给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))

输入描述:

输入包括一个整数n,(3 ≤ n < 1000)

输出描述:

输出对数
示例1

输入

10

输出

2

python3代码:

import math

def isPrime(num):
    if num > 1:
        for i in range(2, int(math.sqrt(num))+1):
            if (num % i) == 0:
                return False
                break
        else:
            return True
    else:
        return False

def getPrimeNumber(num):
    count = 0
    for i in range(2, num//2+1):
        if isPrime(i) and isPrime(num - i):
            count += 1
    return count

if __name__ == '__main__':
    try:
        while True:
            num = int(input(""))
            res = getPrimeNumber(num)
            print(res)
    except:
        pass

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值