数组练习题(一)

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;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值