测试用java
import java.util.Collections;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>();
int x;
Scanner sc = new Scanner(System.in);
System.out.println("从标准设备读入数据,直到输入是非整型数据为止");
while(sc.hasNextInt() ) {
x=sc.nextInt();
v.add(x);
}
Collections.sort(v);
for(int i = 0;i < v.size();i++){
System.out.print(" "+v.get(i));
}
System.out.println();
}
}
C++
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
int x;
vector<int>v;
cout << "从标准设备读入数据,直到输入是非整型数据为止" << endl;
while(cin >> x) {
v.push_back(x);
}
sort(v.begin(), v.end());
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); it++) {
cout << " " << *it;
}
cout<<endl;
return 0;
}
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
int N;
cin >> N;
int x;
vector<int>v;
for (int i = 0; i < N; i++) {
cin >> x;
v.push_back(x);
}
sort(v.begin(), v.end());
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); it++) {
if (it == v.begin())
cout << *v.begin();
else cout << " " << *it;
}
return 0;
}
带比较器
#include <vector>
#include <iostream>
#include<algorithm>
using namespace std;
bool cmp(int d1, int d2)
{
return d1 > d2;
}
int main()
{
vector <int> a;
int n, d;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> d;
a.push_back(d);
}
vector<int>::iterator it;
sort(a.begin(), a.end());
for (it = a.begin(); it != a.end(); it++)
cout << *it << " ";
cout << endl;
sort(a.begin(), a.end(),cmp);
for (it = a.begin(); it != a.end(); it++)
cout << *it << " ";
cout << endl;
return 0;
}
accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。
使用numeric头文件
#include<iostream>
#include<algorithm>
#include<vector>
#include<numeric>
using namespace std;
int main() {
int x;
vector<int>v;
cin >> x;
int sum = 0;
while( x !=0)
{
if (x == 1)
{
sum += 1;
v.clear();
}
else if (x == 2)
{
if (v.empty())
{
sum += 2;
v.push_back(x);
}
else if (!v.empty())
{
v.push_back(x);
sum += accumulate(v.begin(), v.end(), 0);
}
}
cin >> x;
}
v.clear();
cout << sum << endl;
return 0;
}
前缀表达式 算法
遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈
前中后 缀表达式
C++中getline()和cin()同时使用时的注意事项
isdigit()方法
atof(),atoi(),itoa()和stoi(),c_str()函数的用法
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <stack>
#include <string>
#include <cctype>
using namespace std;
int main()
{
stack<float> s;
string str;
getline(cin,str);
double sum=0;
int num = str.length(), i;
int x, y;
for (i = num - 1; i >= 0; i--)
{
string digitStr = "";
if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/') //运算符
{
x = s.top();
s.pop();
y = s.top();
s.pop();
switch (str[i])
{
case '+':
sum = x + y;
break;
case '-':
sum = x - y;
break;
case '*':
sum = x * y*1.0;
break;
case '/':
{
if (y == 0)
{
cout << "ERROR";
return 0;
}
sum = x*1.0 / y;
}
}
s.push(sum); //运算结果放回栈顶
i--;//下一位是空格,所以跳过
}
else //运算数
{
while (i >= 0 && str[i] != ' ')
{
digitStr = str[i] + digitStr;
i--;
}
s.push(atof(digitStr.c_str()));
//atof() 把字符串转换成浮点数,直至遇到第一个空格
//c_str() 将string对象,转化为char*对象。它是String类中的一个函数,它返回当前字符串的首字符地址。
}
}
if (s.size() == 1)
printf("%0.1f\n", s.top());
else
printf("ERROR\n");
return 0;
}
二路合并,最优/差合并 两排好序合并需要 m+n-1 次
#include <vector>
#include <iostream>
#include<algorithm>
using namespace std;
#define N 1000
bool cmp(int d1, int d2)
{
return d1 > d2;
}
int main()
{
int a1[N], a2[N];
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a1[i];
a2[i] = a1[i];
}
sort(a1,a1+n);
sort(a2, a2 + n,cmp);
int sum1 = 0;
int sum2 = 0;
for (int j = 0; j < n - 1; j++)
{
sum1 += a1[j] + a1[j + 1] - 1;
a1[j + 1] +=a1[j];
sort(a1 + j+1, a1 + n ); //a1[j]——a1[n-1]
sum2 += a2[j] + a2[j + 1] - 1;
a2[j + 1] += a2[j];
sort(a2 + j + 1, a2 + n,cmp);
}
cout << sum2 <<" " <<sum1 << endl;
return 0;
}