1、计票统计
第一行输入候选人的人数,第二行输入候选人的名字,第三行输入投票人的人数,第四行输入投票。
每行输出候选人的名字和得票数量,以及投票总数与候选人得票总数之差。
输入例子:
4
A B C D
8
A B C D E F G H
输出例子:
A : 1
B : 1
C : 1
D : 1
Invalid : 4
现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;
每种砝码对应的数量为x1,x2,x3...xn。现在要用这些砝码去称物体的重量,问能称出多少中不同的重量
描述: 比如:
输入砝码种类n; 2
输入砝码质量w[i]; 1 2
输入砝码个数c[i]; 2 1
输出 可以拼凑的质量个数 5
注意:这里0g的砝码也是能称出的一种。
分析:
比如,输入的砝码种类为3
输入砝码的质量为:1 2 3
输入砝码的个数为:3 2 1
先计算第一类砝码能称出来的重量数:为<1 2 3> 保存于vector容器中
向vector中每个元素中添加第二类k个砝码,并去重。
比如:vector长度为3
1+1*2=3,存在,不保存;1+2*2=5,不存在,保存,跟新vector为<1 2 3 5>;
2+1*2=4, 不存在,保存;2+2*2=6,不存在,保存,跟新vetctor为<1 2 3 5 4 6>
3+1*2=5, 存在,不保存;3+2*2=7,不存在,保存,跟新vector为<1 2 3 5 4 6 7>
vector的长度为6
1+1*3=4 存在,不保存
.
.
.
7+1*3=10,不存在,保存 跟新vetctor<1 2 3 4 5 6 7 8 9 10>
vector的长度为10
第一行输入候选人的人数,第二行输入候选人的名字,第三行输入投票人的人数,第四行输入投票。
每行输出候选人的名字和得票数量,以及投票总数与候选人得票总数之差。
输入例子:
4
A B C D
8
A B C D E F G H
输出例子:
A : 1
B : 1
C : 1
D : 1
Invalid : 4
思路:在投票数中寻找每一个候选人出现的次数即可。
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
using namespace std;
int main()
{
int i,j;
int num1, num2,sum=0;
string s;
while (cin >> num1)
{
vector<string> num1_name;
int *data = (int *)malloc(sizeof(int)*num1);
memset(data, 0, sizeof(int)*num1);
for ( i = 0; i < num1; i++)
{
cin >> s;
num1_name.push_back(s);
}
cin >> num2;
vector<string> num2_vote;
for (i = 0; i < num2; i++)
{
cin >> s;
num2_vote.push_back(s);
}
for (i = 0; i < num1; i++)
{
for (j = 0; j < num2; j++)
{
if (num2_vote[j]==num1_name[i])
{
data[i]++;
}
}
cout << num1_name[i] << " : " << data[i] << endl;
sum = sum + data[i];
}
cout << "Invalid : " <<num2-sum << endl;
sum = 0;
vector<string>().swap(num1_name);
vector<string>().swap(num2_vote);
}
return 0;
}
2、称砝码
现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;
每种砝码对应的数量为x1,x2,x3...xn。现在要用这些砝码去称物体的重量,问能称出多少中不同的重量
描述: 比如:
输入砝码种类n; 2
输入砝码质量w[i]; 1 2
输入砝码个数c[i]; 2 1
输出 可以拼凑的质量个数 5
注意:这里0g的砝码也是能称出的一种。
分析:
比如,输入的砝码种类为3
输入砝码的质量为:1 2 3
输入砝码的个数为:3 2 1
先计算第一类砝码能称出来的重量数:为<1 2 3> 保存于vector容器中
向vector中每个元素中添加第二类k个砝码,并去重。
比如:vector长度为3
1+1*2=3,存在,不保存;1+2*2=5,不存在,保存,跟新vector为<1 2 3 5>;
2+1*2=4, 不存在,保存;2+2*2=6,不存在,保存,跟新vetctor为<1 2 3 5 4 6>
3+1*2=5, 存在,不保存;3+2*2=7,不存在,保存,跟新vector为<1 2 3 5 4 6 7>
vector的长度为6
1+1*3=4 存在,不保存
.
.
.
7+1*3=10,不存在,保存 跟新vetctor<1 2 3 4 5 6 7 8 9 10>
vector的长度为10
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int n;
int i,j,k;
int w;
while (cin>>n)
{
int *m = (int *)malloc(sizeof(int)*n);
for ( i = 0; i < n; i++)
{
cin >> m[i];
}
sort(m, m + n);
int *x = (int *)malloc(sizeof(int)*n);
for ( i = 0; i < n; i++)
{
cin >> x[i];
}
vector<int> weigths;
for ( i = 1; i <= x[0]; i++)
{
weigths.push_back(i*m[0]);
}
for ( i = 1; i < n; i++)
{
for ( j = 1; j <= x[i]; j++)
{
int len = weigths.size();
for ( k = 0; k < len; k++)
{
w = weigths[k] + j*m[i];
if (find(weigths.begin(), weigths.end(), w) == weigths.end());//没有找到,说明是新重量,加入
weigths.push_back(w);
}
}
}
cout << weigths.size() << endl;
}
return 0;
}