某厂笔试题

目录

第一题

第二题

第三题

第四题 


第一题

⼩⽩去附近店铺买橘⼦,⽬前商店做活动,提供捆绑打包销售,例如每袋3个和每
袋5个的形式出售。现⼩⽩只想购买n个橘⼦,同时想购买尽量少的袋数⽅便携带。如
果不能购买恰好n个橘⼦,就不会购买(可返回-1),求解输出最少的袋数。(例如:
18)

解析:尽量少的袋数,说明如果要15个,一定是三袋五个的,而不是五袋三个的。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num;
    scanf("%d", &num);
    if(num % 5 == 0)
        printf("%d\n", num/5);
    else
        if((num - 3) % 5 == 0)
            printf("%d\n", (num - 3) / 5 + 1);
        else if((num - 6) % 5 == 0)
            printf("%d\n", (num - 6) / 5 + 2);
        else if((num - 9) % 5 == 0)
            printf("%d\n", (num - 6) / 5 + 3);
        else if((num - 12) % 5 == 0)
            printf("%d\n", (num - 6) / 5 + 4);
        else
            printf("-1");
    return 0;
}

第二题

⼩红去超市买玩具,⼝袋怀揣了n张钱,买了⼀个价值m的玩具。钱的⾯额可以
是1元、5元、10元、50元,⽽⼩红拥有的钱中有的⾯额可能没有,问,付钱的时
候,会有多少种可能的付费组合⽅式?
输⼊:输⼊两个数n(多少张钱),m(玩具的价格)
输出:请输出可能的组合⽅式数。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n , m, sum = 0;
    scanf("%d %d", &n, &m);
    for(int i=0; i<=n; i++){
        for(int j=0; j<=n; j++){
            for(int k=0; k<=n; k++){
                for(int l=0; l<=n; l++){
                    if(i + j + k + l <= n && i + 5*j + 10*k + 50*l == m){
                        printf("%d张1元,%d张5元, %d张10元, %d张50元\n", i, j, k, l);
                        sum++;
                    }
                }
            }
        }
    }
    printf("%d\n", sum);
}

第三题

我们公司⽻⽑球队开始招新了,计划招收x⼈,每个⼈根据⽔平划分⾃⼰的级别
档位1~8级别
现计划按⼀下要求分成2个队伍(1队、2队)
1)1队的成员级别之和⼤于2对成员级别之和
2)1队的任意⼀名队员,如果分配他去到2队,1队的成员级别之和就会严格⼩于2对
成员级别之和
3)每个队员必须要加⼊⼀个队伍
现在有多少⽅案可以完成上⾯分配
例如招收4⼈,⽔平级别分别:5 4 7 6 有⼏种分队⽅案
#include <stdio.h>
#include <stdlib.h>
int n;
int num[10], flag[10];
int sum = 0;

int fun(int index){



    if(index == n){
        int sum1 = 0, sum2 = 0, Min = 8;
        for(int i = 0 ; i < n ; i++){
            if(flag[i] == 0){
                sum1 += num[i];
            }else{
                sum2 += num[i];
            }
            if(flag[i] == 0 && Min > num[i]){
                Min = num[i];
            }

        }
        if(sum1 >= sum2 && sum1 - Min < sum2 + Min){
            sum ++;
            for(int i = 0 ; i < n ; i++){
                printf("%d ", flag[i]);
            }
            printf("\n");
        }
        return 0;
    }

    for(int i = 0; i < 2; i++){
        flag[index] = i;
        index++;
        fun(index);
        index--;
    }

}

int main()
{

    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%d", &num[i]);
    }
    fun(0);
}

第四题 

系统设计题
1)请分析题⽬需求,给出你认为合理的技术⽅案,技术⽅案格式可参考原公司;
2)请充分通过题⽬展现你的设计⽅法,设计理念。对于关键的技术选型,给出适当注
解;
需求描述:设计⼀个服务,任何⼈调⽤这个服务,都返回⼀个unique id,不能重复;
参考:分布式唯一id · zhan 编程笔记https://note.grianchan.com/leetcode/%E5%85%B6%E5%AE%83/%E5%88%86%E5%B8%83%E5%BC%8F%E5%94%AF%E4%B8%80id.html

猜你喜欢

转载自blog.csdn.net/qq_41664159/article/details/121853492