2017年校招全国统一模拟笔试(第二场)编程题集合-牛客网

 2017年校招全国统一模拟笔试(第二场)编程题集合-牛客网

链接:https://www.nowcoder.com/questionTerminal/276712b113c6456c8cf31c5073a4f9d7
来源:牛客网

牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。

输入描述:
输入为两行字符串(可能包含空格),长度均小于等于50.
输出描述:
输出为一个整数,表示最长公共连续子串的长度。
输入例子:
abcde
abgde
输出例子:
2
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const int MAXN = 55; 

int dp[MAXN][MAXN];   

int main(){
	int ans;
	char st1[MAXN], st2[MAXN];
	cin.getline(st1, MAXN);
	cin.getline(st2, MAXN);
	int len1 = strlen(st1), len2 = strlen(st2);
	memset(dp, 0, sizeof(dp));
	ans = 0;
	for(int i=0; i<len1; ++i){
		for(int j=0; j<len2; ++j){
			if(st1[i] == st2[j]){
				dp[i+1][j+1] = max(dp[i][j]+1, dp[i+1][j+1]);
				if( dp[i+1][j+1] > ans ){
					ans = dp[i+1][j+1];
				}
			}
		}
	}
	printf("%d\n", ans );
	return 0;
}

  

链接:https://www.nowcoder.com/questionTerminal/f216fb2b6fa84fcbb43537e22f1aa0d2
来源:牛客网

牛牛想在[a, b]区间内找到一些数满足可以被一个整数c整除,现在你需要帮助牛牛统计区间内一共有多少个这样的数满足条件?

输入描述:
首先输入两个整数a,b,(-5*10^8 ≤ a ≤ b ≤ 5*10^8)
接着是一个正整数c(1 <= c <= 1000)
输出描述:
输出一个整数表示个数。
输入例子:
0 14 5
输出例子:
3
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;

int main(){

    int a, b, c, start, ans, flag;
    while(scanf("%d %d %d", &a, &b, &c) != EOF){
        flag = 0;
        if(a >= 0){
            flag = 1;
        }else if(b <= 0){
            swap(a, b);
            a = -a; b = -b;
            flag = 1;
        }else{
            ans = ((-a))/c + 1 + (b)/c;
        }
        if(flag){
            start = a;
            for( ; start <= b; ++start ){
                if(start%c == 0){
                    break;
                }
            }
            ans = (b - start)/c + 1;
        }
        printf("%d\n", ans );
    }
    return 0;
}

  

链接:https://www.nowcoder.com/questionTerminal/0c5d9dcb75c84551be2e162c01bc4c6a
来源:牛客网

牛牛手里有N根木棒,分别编号为1~N,现在他从N根里想取出三根木棒,使得三根木棒构成一个三角形,你能计算出牛牛有多少种取法吗?(考虑两种取法中使用的木棒编号有一个不一样就认为是不同的取法)。

输入描述:
首先输入一个正整数N,接下来的一行共有N个正整数表示每个木棒的长度。
N ≤ 50, 木棒的长度 ≤ 10000.
输出描述:
输出一个整数表示方法数。
输入例子:
5
1 2 3 4 5
输出例子:
3
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int MAXN = 55;

int valid(const int a, const int b, const int c){
    if((a+b)>c && (a+c)>b && (c+b)>a){
        return 1;
    }else{
        return 0;
    }
}
int main(){
    int n, ans, num[MAXN];
    while(scanf("%d", &n) != EOF){
        for(int i=0; i<n; ++i){
            scanf("%d", &num[i]);
        }
        ans = 0;
        for(int i=0; i<n; ++i){
            for(int j=i+1; j<n; ++j){
                for(int k=j+1; k<n; ++k){
                    if( valid(num[i], num[j], num[k]) ){
                        ans = ans + 1;
                    }
                }
            }
        }
        printf("%d\n", ans );
    }
    return 0;
}

  

链接:https://www.nowcoder.com/questionTerminal/2b48f56275c64de888c321aeb3492be9
来源:牛客网

牛牛在二维坐标系中画了N个点,且都是整点。现在牛牛想画出一个矩形,使得这N个点都在矩形内或者在矩形上。

矩形的边均平行于坐标轴。牛牛希望矩形的面积最小。请你帮助牛牛计算下最小矩形的面积。

输入描述:
首先输入一个正整数N表示点的个数(2 <= N <= 50)
接下来N行每行两个整数x, y,表示该点的坐标。绝对值均小于等于100.
输出描述:
一个整数表示最小矩形的面积。
输入例子:
2
0 1
1 0
输出例子:
1
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;

int main(){
    int n, ans, x, y, min_x, min_y, max_x, max_y;
    while(scanf("%d", &n) != EOF){
        min_x = min_y = 0x3f3f3f3f;
        max_x = max_y = -0x3f3f3f3f;
        for(int i=0; i<n; ++i){
            scanf("%d %d", &x, &y);
            if(x < min_x){
                min_x = x;
            }
            if(x > max_x){
                max_x = x;
            }
            if(y < min_y){
                min_y = y;
            }
            if(y > max_y){
                max_y = y;
            }
        }
        ans = (max_y - min_y) * (max_x - min_x);
        printf("%d\n", ans );
    }
    return 0;
}

  

链接:https://www.nowcoder.com/questionTerminal/41cb7d4ed0254c69a06d596d89ad12a2
来源:牛客网

牛牛在研究他自己独创的平衡数,平衡数的定义是:将一个数分成左右两部分,分别成为两个新的数。

左右部分必须满足以下两点:

1,左边和右边至少存在一位。

2,左边的数每一位相乘如果等于右边的数每一位相乘,则这个数称为平衡数。

例如:1221这个数,分成12和21的话,1*2=2*1,则称1221为平衡数,再例如:1236这个数,可以分成123和1*2*3=6,所以1236也是平衡数。而1234无论怎样分也不满足平衡数。

输入描述:
输入一个正整数(int范围内)。
输出描述:
如果该数是平衡数,输出 "YES", 否则输出 "NO"。
输入例子:
1221
1234
输出例子:
YES
NO
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;

int main(){

    int n, idx, i, j, left_val, right_val, num[10];
    while(scanf("%d", &n) != EOF){
        idx = 0;
        while(n){
            num[idx++] = n%10;
            n /= 10;
        }
        if(idx < 2){
            printf("NO\n");
            continue;
        }else if(idx < 3){
            if(num[0] == num[1]){
                printf("YES\n");
            }else{
                printf("NO\n");
            }
            continue;
        }
        i = 0; j = idx-1;
        left_val = 1;
        right_val = 1;
        while(i <= j){
            if(left_val != 0 && left_val <= right_val){
                left_val = left_val * num[i++];
            }else{
                right_val = right_val * num[j--];
            }
        }
        if(right_val == left_val){
            printf("YES\n");
        }else{
            printf("NO\n");
        }
    }
    return 0;
}

  

链接:https://www.nowcoder.com/questionTerminal/9fbb4d95e6164cd9ab52e859fbe8f4ec
来源:牛客网

牛牛有N个字符串,他想将这些字符串分类,他认为两个字符串A和B属于同一类需要满足以下条件:

A中交换任意位置的两个字符,最终可以得到B,交换的次数不限。比如:abc与bca就是同一类字符串。

现在牛牛想知道这N个字符串可以分成几类。

输入描述:
首先输入一个正整数N(1 <= N <= 50),接下来输入N个字符串,每个字符串长度不超过50。
输出描述:
输出一个整数表示分类的个数。
输入例子:
4
abcd
abdc
dabc
bacd
输出例子:
1
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;

int main(){

    int n, ans;
    string st;
    while(cin>>n){
        ans = 0 ;
        map<string, int> mp;
        for(int i=0; i<n; ++i){
            cin >> st;
            sort(st.begin(), st.end());
            if(mp.find( st ) == mp.end()){
                mp[ st ] = 1;
                ans = ans + 1;
            }
        }
        printf("%d\n", ans );
    }
    return 0;
}

  

链接:https://www.nowcoder.com/questionTerminal/b8bc8459f0d34aaa8c1af1328cab2432
来源:牛客网

众所周知计算机代码底层计算都是0和1的计算,牛牛知道这点之后就想使用0和1创造一个新世界!牛牛现在手里有n个0和m个1,给出牛牛可以创造的x种物品,每种物品都由一个01串表示。牛牛想知道当前手中的0和1可以最多创造出多少种物品。

输入描述:
输入数据包括x+1行:
第一行包括三个整数x(2 ≤ x ≤ 20),n(0 ≤ n ≤ 500),m(0 ≤ m ≤ 500),以空格分隔
接下来的x行,每行一个01串item[i],表示第i个物品。每个物品的长度length(1 ≤ length ≤ 50)
输出描述:
输出一个整数,表示牛牛最多能创造多少种物品
输入例子:
3 3 1
1
00
100
输出例子:
2
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int MAXN = 505;

int n, m, dp[MAXN][MAXN];

int main(){

    int ans, x, cnt1, cnt0;
    char ch[MAXN];
    while(scanf("%d %d %d", &x, &n, &m ) != EOF){
        memset(dp, 0, sizeof(dp));
        ans = 0;
        for(int i=0; i<x; ++i){
            getchar();
            scanf("%s", ch);
            cnt0 = cnt1 = 0;
            for(int j=0; j<strlen(ch); ++j){
                if(ch[j] == ‘0‘){
                    cnt0 = cnt0 + 1;
                }else{
                    cnt1 = cnt1 + 1;
                }
            }
            for(int j=n; j>=cnt0; --j){
                for(int k=m; k>=cnt1; --k){
                    dp[j][k] = max( dp[j][k], dp[j-cnt0][k-cnt1] + 1 );
                    if(dp[j][k] > ans){
                        ans = dp[j][k];
                    }
                }
            }
        }
        printf("%d\n", ans );
    }
    return 0;
}

  

链接:https://www.nowcoder.com/questionTerminal/cf00949583604f8c9f3315fd64236a8c
来源:牛客网

牛牛在书上看到一种字符串叫做回文串,当一个字符串从左到右和从右到左读都是一样的,就称这个字符串为回文串。牛牛又从好朋友羊羊那里了解到一种被称为优美的回文串的字符串,考虑一个长度为N只包含大写字母的字符串,写出它所有长度为M的连续子串(包含所有可能的起始位置的子串,相同的子串也要计入),如果这个字符串至少有K个子串都是回文串,我们就叫这个字符串为优美的回文串。现在给出一个N,牛牛希望你能帮他计算出长度为N的字符串有多少个是优美的回文串(每个位置都可以是‘A‘~‘Z‘的一个。)

输入描述:
输入数据包括三个整数N, M, K(2 ≤ N ≤ 11, 2 ≤ M ≤ N, 0 ≤ K ≤ 11).
输出描述:
输出一个整数,表示所求的字符串个数.
输入例子:
2 2 1
输出例子:
26
长度为2的字符串,它长度为2的子串只有它自身。长度为2的回文串有"AA","BB","CC"..."ZZ",一共26种。

(没有做出来,难度挺大的)(from 网友)

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 100; 

int n, m, k,a[20];
long long fac[27], res; 

bool ok(int from){
	for(int i=0; i<m/2; ++i){
		if(a[from+i] != a[from + m - i- 1]){
			return false;
		}
	}
	return true;
}

bool ok(){
	int cnt = 0;
	for(int i=0; i<=n-m; ++i){
		if(ok(i)){
			++cnt;
		}
	}
	return cnt >= k;
}

void dfs(int pos, int num){
	if(pos == n){
		if(ok()){
			res += fac[num];
		}
	}else{
		for(int i=0; i<num; ++i){
			a[pos] = i;
			dfs(pos +1, num);
		}
		a[pos] = num;
		dfs(pos+1, num+1);
	}
}

int main(){
	freopen("in.txt", "r", stdin); 

	while(scanf("%d %d %d", &n, &m, &k) != EOF){
		fac[0] = 1;
		for(int i=1; i<=26; ++i){
			fac[i] = fac[i-1] * (27 - i);
		}
		dfs(0, 0);
		printf("%lld\n", res );
	}
	return 0;
}

  

时间: 2024-12-27 22:52:29

2017年校招全国统一模拟笔试(第二场)编程题集合-牛客网的相关文章

网易2017秋招编程题集合-牛客网

网易2017秋招编程题集合-牛客网 链接:https://www.nowcoder.com/questionTerminal/0147cbd790724bc9ae0b779aaf7c5b50来源:牛客网 如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列.例如: {1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列. 现在给出一个数字序列,允许使用一

好未来2017秋招笔试真题二 --牛客网

好未来2017秋招笔试真题二 --牛客网 链接:https://www.nowcoder.com/questionTerminal/ee5de2e7c45a46a090c1ced2fdc62355来源:牛客网 将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100 输出描述: 依次输出倒置之后的字符串,以空格分割 输入例子: I

牛客网秋招模拟笔试第二场(选择题)

1.计数排序算法(需要两个辅助数组存放排序结果的B[1...n],提供临时存储区的C[0...k]),输入数组A[1...n] 辅助数组C的长度,输入数组的最大数就是辅助数组的长度 计数排序是一种线性排序算法,不用进行比较.基本思想是对于每个元素x,找出比x小的数的个数,从而确定x在排好序的数组中的位置. 图中,数组A是待排序的数组,C是用来临时存放信息的数组,B是最终排好序的数组.对于A中的每一个元素,我们将其元素作为C数组的下标.直白的说,如a中,C[0]=2表示A中的元素为0的有两个,C[

2017-08-23 华为笔试第二道编程题详解

[题目描述] 给定一个整数,给出消除重复数字以后最大的整数 输入描述 :正整数,注意考虑长整数 输出描述 : 消除重复数字后的最大整数 [示例1] 输入 : 423234 输出 : 432 [思路] 使用栈作为辅助工具,首先从前往后遍历数组 * 栈为空就压入栈 * 栈非空,判断当前数组元素是否大于栈顶元素 * 是 , 判断栈顶元素是否在后面的数组中存在,如果存在就弹出栈顶元素 * 判断栈中是否已经存在当前数组元素,否,将当前数组元素压入栈 [参考] http://www.cnblogs.com/

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需

计蒜之道2015程序设计大赛初赛第二场——人人都有极客精神

计蒜之道2015程序设计大赛初赛第二场——人人都有极客精神 (一)体面 人人公司是一家极为鼓励极客精神的公司,当有重要的项目需要上线但又时间太紧,甚至需要当天上线的时候,往往会挂起海盗旗开启电子日期显示,让大家可以在对时间有更明确的感知的情况下,同心协力搞定重要的项目.海盗旗下方的电子屏显示的日期形式为 YYYYMMDD (年份占 4 位.月份占 2 位.天数占 2 位). 日期电子屏幕上每个数字对应的显示如下图: 从上图可以得知每个数字对应的笔画数,比如 2 的笔画数是 5,8 的笔画数是 7

牛客网NowCoder 2018年全国多校算法寒假训练营练习比赛(第四场)A.石油采集(dfs) B.道路建设(最小生成树prim) C.求交集(暴力) F.Call to your teacher(迪杰斯特拉乱用) H.老子的全排列呢(dfs)

菜哭了... A.石油采集 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 链接:https://www.nowcoder.com/acm/contest/76/A来源:牛客网 题目描述 随着海上运输石油泄漏的问题,一个新的有利可图的行业正在诞生,那就是撇油行业.如今,在墨西哥湾漂浮的大量石油,吸引了许多商人的目光.这些商人们有一种特殊的飞机,可以一瓢略过整个海面20米乘10米这么大的长方形.(上下相

【题集】牛客网&#183;2018年全国多校算法寒假训练营练习比赛(第二场)

原文链接:2018年全国多校算法寒假训练营练习比赛(第二场) A 吐泡泡 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 小鱼儿吐泡泡,嘟嘟嘟冒出来.小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o". 两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉. (是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道.) 例如:ooOOoooO经过一段时间

2016 网易校招内推C/C++第二场8.6

选择题20个,每个1.5,编程题3个,每个20,简答题1个10分. 解: 第二题,一开始喵了一眼,好开心,这不是水题么,第一反应想到的是递归,然后马上就写了,结果case10%,一脸蒙蔽,数据值很大,考虑边界条件也比较困难. 递归: 1 #include "iostream" 2 #define MAX 100000 3 #define tag 1000000007 4 5 typedef long long LL; 6 7 using namespace std; 8 9 LL x;