(一)求数列的和
时间限制: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位小数。
我的代码:
#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=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
输入描述:
有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。
输出描述:
每组数据输出一个表示最大的整数。
#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行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号
输出描述:
输出树的高度,为一个整数
#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个字符)
输出描述:
对于每个测试示例,要求输出句子中单词反转后形成的句子
我的代码:
#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;
}
}
}
};