1. (销售人员薪金范围)解决以下问题。一家公司以底薪加提成的方式付给销售人员工资。销售人员每周获得200美元的底薪,外加本周达到一定销售额的9%的提成。例如,一个销售人员一周的销售额是5000美元,就会得到200美元加上5000美元的9%,即总共650美元。请编写一个程序(利用一个计数器的array对象),判断有多少销售人员可以获得以下范围内的报酬(假设每个销售人员的报酬都将取整)。
a)200~299美元
b)300~399美元
c)400~499美元
d)500~599美元
e)600~699美元
f)700~799美元
g)800~899美元
h)900~999美元
i)1000美元及以上
#include <iostream>
#include<vector>
using namespace std;
int main()
{
const int baseSalary = 200;//基本工资
const double rate = 0.09;//提成比例
int staffnumber;
cout << "请输入员工数" << endl;
cin >> staffnumber;
//获取每位员工的营业额
vector <int> sales(staffnumber);//vector可用于动态输入,而一维数组大小必须为常量值
cout << "请输入每位员工的营业额" << endl;
for (int i = 0; i < staffnumber; ++i)
{
cin >> sales[i];
}
// 统计落入每个报酬范围的销售人员数量
vector<int> salaryCount(9, 0); // 分别对应a)到i)的范围
for (int i = 0; i < staffnumber; ++i) {
int sale = sales[i];
double commission = sale * rate;
int totalSalary = baseSalary + static_cast<int>(commission);
// 将总收入放入相应的范围计数器中
if (totalSalary >= 200 && totalSalary <= 299) {
salaryCount[0]++;
}
else if (totalSalary >= 300 && totalSalary <= 399) {
salaryCount[1]++;
}
else if (totalSalary >= 400 && totalSalary <= 499) {
salaryCount[2]++;
}
else if (totalSalary >= 500 && totalSalary <= 599) {
salaryCount[3]++;
}
else if (totalSalary >= 600 && totalSalary <= 699) {
salaryCount[4]++;
}
else if (totalSalary >= 700 && totalSalary <= 799) {
salaryCount[5]++;
}
else if (totalSalary >= 800 && totalSalary <= 899) {
salaryCount[6]++;
}
else if (totalSalary >= 900 && totalSalary <= 999) {
salaryCount[7]++;
}
else if (totalSalary >= 1000) {
salaryCount[8]++;
}
}
// 输出每个范围内的销售人员数量
cout << "200~299美元: " << salaryCount[0] << " 人" << endl;
cout << "300~399美元: " << salaryCount[1] << " 人" << endl;
cout << "400~499美元: " << salaryCount[2] << " 人" << endl;
cout << "500~599美元: " << salaryCount[3] << " 人" << endl;
cout << "600~699美元: " << salaryCount[4] << " 人" << endl;
cout << "700~799美元: " << salaryCount[5] << " 人" << endl;
cout << "800~899美元: " << salaryCount[6] << " 人" << endl;
cout << "900~999美元: " << salaryCount[7] << " 人" << endl;
cout << "1000美元及以上: " << salaryCount[8] << " 人" << endl;
return 0;
}
2. (利用array对象去重)利用一个一维array对象解决以下问题。读入20个数,每个数在10~100之间(包括10和100)。在读入每个数时,确认这个数的有效性,并且若它和之前读入的数不一样,就把它存储到array对象中。读完所有的数之后,仅显示用户输入的不同的数值。假设“最糟糕的情况”是这20个数都不相同。请尽量用最小的array对象解决这个问题。
#include <iostream>
using namespace std;
int main()
{
const int size = 20;
const int Min_Value = 10;
const int Max_Value = 100;
int currentIndex = 0;//当前位置的索引
int array[size];//创建数组
cout << "请输入10~100的有效数字" << endl;
for (int i = 0; i < size; ++i)
{
int num;
cin >> num;
//检查有效性
if (num < 10 || num>100) {
cout << "输入的数值不在有效范围内,请重新输入。" << endl;
--i; // 重新尝试读取同一个位置
continue;
}
//检查是否相同
bool alreadyExists = false;
for (int j = 0; j < currentIndex; ++j) {
if (array[j] == num) {
alreadyExists = true;
break;
}
}
// 如果数值不重复,则存储到数组中
if (!alreadyExists) {
array[currentIndex] = num;
currentIndex++;
}
}
cout << "您输入的不同的数值为:" << endl;
for (int i = 0; i < currentIndex; ++i) {
cout << array[i] << " ";
}
cout << endl;
return 0;
}
(掷双骰)编写一个程序,模拟掷两个骰子,然后计算两个骰子值的和。注意:由于每个骰子显示1~6之间的一个整数值,因此这两个值的和在2~12之间变动,其中7是出现频率最高的值,而2和12是出现频率最低的值。两个骰子值共36种可能的组合。程序应该掷这两个骰子36000次。请利用一个一维array对象记录每个可能的和出现的次数。以表格的形式打印结果。同时,判定这些次数的统计值是否合理(也就是说,有6种方式可以掷到7,因此所有掷出的和值中,大约有1/6应该是7)。
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
const int POSSIBLE_SUMS = 13; // 因为和的范围是2到12,共有11种可能的和
const int ROLLS = 36000; // 掷骰子的总次数
int main() {
int dice1, dice2;
int sum;
int frequencies[POSSIBLE_SUMS] = { 0 };
// 设置随机种子
srand(time(0));
// 掷骰子并统计结果
for (int i = 0; i < ROLLS; ++i) {
dice1 = rand() % 6 + 1; // 生成1到6之间的随机数
dice2 = rand() % 6 + 1; // 生成1到6之间的随机数
sum = dice1 + dice2;
frequencies[sum]++;
}
// 打印表头
cout << setw(10) << "Sum" << setw(15) << "Frequency" << setw(18) << "Expected Probability" << endl;
cout << "----------------------------------------------" << endl;
// 打印每个和值的统计结果和理论概率
for (int i = 2; i <= 12; ++i) {
double expected_prob = static_cast<double>(frequencies[i]) / ROLLS;
cout << setw(10) << i << setw(15) << frequencies[i] << setw(18) << expected_prob << endl;
}
}