牛客网编程题记录

(一)求数列的和

时间限制:1秒 空间限制:32768K 热度指数:36466
算法知识视频讲解
题目描述
给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello”
输入描述:

输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)

输出描述:

对于每个测试示例,要求输出句子中单词反转后形成的句子

示例1
输入
复制

hello xiao mi

输出
复制

mi xiao hello


时间限制:1秒  空间限制:32768K  热度指数:23604
 算法知识视频讲解

题目描述

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

输入描述:

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

输出描述:

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

输入

复制
81 4
2 2

输出

复制
94.73
3.41

我的代码:

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double  n; int m; double sum;

int main()
{
	while (cin >> n >> m)
	{
		for (int i = 1; i <= m; ++i)
		{
			sum += n;
			n = sqrt(n);
		}
		cout << setiosflags(ios::fixed);
		cout << setprecision(2) << sum << endl;
	}
	return 0;
}

(二)数串

时间限制:1秒  空间限制:32768K  热度指数:63609
 算法知识视频讲解

题目描述

设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。

输入描述:

有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。

输出描述:

每组数据输出一个表示最大的整数。
示例1

输入

复制
2
12 123
4
7 13 4 246

输出

复制
12312
7424613
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
bool campare(string i, string j){
    return i + j>j + i;  //对两字符串从左向右比较直到出现第一个不同的,
    //以不同的字符谁大谁小为准
}
int main(){
    int n;
    while (cin >> n){
        vector<string>temp(n, "");
        for (int i = 0; i < n; ++i){
            cin >> temp[i];
        }
        sort(temp.begin(), temp.end(), campare);
        for (int i = 0; i < n; ++i)
            cout << temp[i];
        cout << endl;
    }
    return 0;
}

(三)

时间限制:1秒 空间限制:32768K 热度指数:22689
算法知识视频讲解

题目描述

现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度

输入描述:

输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成,
下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号

输出描述:

输出树的高度,为一个整数
示例1

输入

复制
5
0 1
0 2
1 3
1 4

输出

复制
3
#include<iostream>
#include<vector>
using namespace std;
int find_max_height( vector<vector<int>> &temp,int p){
    if(temp[p].empty())
        return 1;
    else if(temp[p].size()==1)
        return 1+find_max_height(temp,temp[p][0]);
    else
        return 1+max(find_max_height(temp,temp[p][0]),find_max_height(temp,temp[p][1]));
}
int main()
{
    int n;
    cin>>n;
    vector<vector<int>> temp(n,vector<int>());
    for(int i=0;i<n-1;++i){
        int parent,child;
        cin>>parent>>child;
        temp[parent].push_back(child);
    }
    cout<<find_max_height(temp,0)<<endl;
}

(四)

知识点:栈的简单使用,掌握常见的接口函数,复习STL以及模板

时间限制:1秒 空间限制:32768K 热度指数:36466
算法知识视频讲解

题目描述

给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “helloxiao mi”-> “mi xiao hello”

输入描述:

输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)

输出描述:

对于每个测试示例,要求输出句子中单词反转后形成的句子
示例1

输入

复制
hello xiao mi

输出

复制
mi xiao hello

我的代码:

#include <iostream>
#include <stack>
#include <string>
using namespace std;

int main()
{
	stack<string> STACK;
	
		string tmpstring;
		while(cin >> tmpstring)
		{
			STACK.push(tmpstring);
		}
		for (unsigned int j = STACK.size(); j >= 1; --j)
		{
			cout << STACK.top();
			if (STACK.size() != 1)
			{
				cout << ' ';
			}
			STACK.pop();
		}

	return 0;
}

(五)彩色项链

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

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
    {
    string str;
    while (cin>>str) {
        int len=str.size();
        string str1="";
        for (int i=0;i<len-1;i++) {
            str1+=str[i];
        }
        //reverse(str1.begin(),str1.end());
        str+=str1;
        int min=1000;
        int a,b,c,d,e,index=0;
        for (int i=4;i<2*len-1;i++) {
            a=0,b=0,c=0,d=0,e=0;
            for (int j=i;j>=0;j--) {
                if (str[j]=='A') a=1;
                if (str[j]=='B') b=1;
                if (str[j]=='C') c=1;
                if (str[j]=='D') d=1;
                if (str[j]=='E') e=1;
                index++;
                if (a+b+c+d+e==5) {
                    if (index<min) {
                        min=index;
                    }
                    index=0;
                    break;
                }
            }
        }
        if (min==1000) cout<<0<<endl;
        else cout<<len-min<<endl;
    }
    return 0;
}

六、调整数组顺序使奇数位于偶数前

时间限制:1秒  空间限制:32768K  热度指数:290018
本题知识点:  数组

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        if(array.size()==0)
            return;
       vector<int>:: iterator it=array.begin();
        unsigned int size=array.size();
       while(size)
        {
           if(*it%2==0)
           {
               int tmp=*it;
              array.erase(it);
               array.push_back(tmp);
               size--;
           }
           
           else
           {
            ++it;
               --size;
               }
       }
    }
};

猜你喜欢

转载自blog.csdn.net/qq_34793133/article/details/80742243