题目1:求中位数
题目标签
排序
题目描述
给定一个整数序列,求中位数。
输入描述
输出描述
输入样例:
输出样例:
参考代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, i;
scanf("%d", &n);
vector<int> v(n);
for(i=0; i<n; i++) scanf("%d", &v[i]);
sort(v.begin(), v.end());
printf("%d\n", v[n/2]);
return 0;
}
题目点评
氵到离谱
题目2:求解校验码
题目标签
字符串处理
题目描述
给定一个9位数字的ISBN,求其校验位。ISBN格式为2-02-033598,
校验位的计算方法如下:从左到右依次将各位数字乘10,9,8,……,2,
求出其和S,作模运算得M=S mod 11。若11-M在1和9之间,校验位即为该数字
若11-M等于10,校验位为X;11-M等于11,校验位为0。
输出添加校验位的ISBN,如2-02-033598-0。
输入描述
给定一个9位数字的ISBN
输出描述
输出添加校验位的ISBN
输入样例:
为2-02-033598 (注:计算得和S为0)
输出样例:
2-02-033598-0
参考代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i, j=10, sum=0;//sum记录和
string s;//注意读取过程中如何处理跳过-
cin >> s;
for(i=0; i<s.size(); i++){//i用来控制扫描字符串
if(s[i]=='-') continue;//使用continue
else{
sum += stoi(s.substr(i,1))*j;//如果是数字,那么求和
//stoi函数
//作用是将 n 进制的字符串转化为十进制,使用时包含头文件string.
// s.substr(pos, len)赋值字符串,长度
//: string,包含s中从pos开始的len个字符的拷贝
//(pos的默认值是0,len的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
j--;//j表示每一位乘以多少 ,只有读取了数字j才会变化
}
}
sum = 11-(sum%11);//注意是11-M,这里可以再开一个变量,也可以用sum直接存
cout << s << "-";//先把前面的输出,再最后面添加校验码
//
if(sum<=9) cout << s << endl;//如果余数是1-9直接输出
else if(sum==10) cout << "X" << endl;//如果余数是10,那么输出 “X”
else cout << "0" << endl;//注意11-M的范围是1-11
return 0;
}
//stoi函数报错处理
//打开Devc++ ->工具 –> 编译选项 –> 代码生成/优化 –> 代码生成 -> 语言标准 –> 选择GUI C++11就可以了
题目3:无向图
题目标签
图
题目描述
一个无向图,顶点为N个,顶点编号为1~N,其中M条边已给定,
现在要从K条备选边中选出若干条,使得整个图连通,且选出的边权值和最小。
输入描述
第一行输入三个整数N(N<100), M, K,
接下来一行为K个整数表示备选边的编号。
然后是是M行,每行三个数字:u,v,d(0<d<10000)表示结点u和结点v的边,权值为d
编号按照输入输入顺序依次为1~M。
输出描述
如果输入有解则输出选出的边的权值和
否则输出-1
输入样例:
输出样例:
参考代码
#include<bits/stdc++.h>
using namespace std;
struct Edge{
int u, v, d;
}se[6000];
int f[110], ke[6000];
bool cmp(Edge a, Edge b){
return a.d<b.d;
}
int getf(int x){
return x==f[x]?x:(f[x]=getf(f[x]));
}
int main()
{
int n, m, k, i, u, v, d, j=0, q=0, sum=0;
scanf("%d %d %d", &n, &m, &k);
for(i=0; i<k; i++) scanf("%d", &ke[i]);
sort(ke, ke+k);
for(i=1; i<=m; i++){
scanf("%d %d %d", &u, &v, &d);
if(i==ke[j]){
se[j].u = u;
se[j].v = v;
se[j].d = d;
j++;
}
}
for(i=1; i<=n; i++) f[i] = i;
sort(se, se+k, cmp);
for(i=0; i<k; i++){
int ru = getf(se[i].u);
int rv = getf(se[i].v);
if(ru!=rv){
f[ru]=rv;
sum+=se[i].d;
q++;
}
if(q==n-1) break;
}
if(q==n-1) printf("%d", sum);
else printf("-1");
return 0;
}
希望今年有中位数
Orz
求今年遇到中位数这种题 orz
我也希望qaq