c++实现S=1+(1+2)+(1+2+3)+…..(1+2+3+…+n)的和、统计各成绩个数、组成三位不重复的数字

263 阅读1分钟

1.求S = 1 + (1 + 2) + (1 + 2 + 3) + …..(1 + 2 + 3 + … + n)的和。

int n;
cout << "请输入n值:" << endl;
cin >> n;
int result = 0, temp = 0;
for (int i = 1; i <= n; i++) {
temp += i;
result += temp;
}

cout << "s=1+(1+2)+(1+2+3)+…+(1+2+3+…+" << n << ")=" << result << endl;

思路:定义两个变量,temp记录的是你一次1+...+n的值,而result记录的是每次求1+...n项总和的前面每次的值相加,比如当n等于4的时候,1+(1+2)+(1+2+3)+(1+2+3+4) = ?,temp记录的是(1+2+3+4)的值,而result记录的是1 (1+2) (1+2+3) (1+2+3+4) 每次次数的值

image.png

运算结果如下:

image.png

2、写一函数输入10个学生的成绩,统计各分数段的人数。分数段为:90及90分以上,80到89分,70到79分,60到69分,60分以下。

#include <iostream>
using namespace std;
int main() {

	cout << "s=1+(1+2)+(1+2+3)+…+(1+2+3+…+" << n << ")=" << result << endl;

	//2、写一函数输入10个学生的成绩,统计各分数段的人数。
	//分数段为:90及90分以上,80到89分,70到79分,60到69分,60分以下。

	//动态分配10个空间的数组,可以接收到修改后的数组
	int* newScore = new int[10];
	printScore(newScore); // 调用循环输入成绩的方法

	int jC=0, bC=0, qC=0, lC=0, lD=0;
	for (int i = 0; i < 10; i++) {
		//不同分段人数进行判断,统计各分段人数
		if (newScore[i] >= 90) {
			jC++;
		}
		else if (newScore[i] >= 80 && newScore[i] < 90) {
			bC++;
		}
		else if (newScore[i] >= 70 && newScore[i] < 80) {
			qC++;
		}
		else if (newScore[i] >= 60 && newScore[i] < 70) {
			lC++;
		}
		else  {
			lD++;
		}
	}

	cout << "90及90分以上的同学有" << jC << "个,80到89分的同学有"<<bC
		<<"个,70到79分的同学有"<<qC<<"个,60到69分的同学有"<<lC<<"个,60分以下的同学有"<<lD<<"个" << endl;
	return 0;
}

思路:采用while循环10次,每次输入一次成绩后将每次的结果存入指针数组,赋值完成后遍历指针数组进行每次成绩的访问,在for循环中进行判断处理。

结果如下:

image.png

3、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

#include <iostream>
using namespace std;
int main() {
	//3、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
	for (int i = 1; i < 5; i++) {
		for (int j = 1; j < 5; j++) {
			for (int k = 1; k < 5; k++) {
				if (i != k && i != j && j != k) {
					cout << i <<j<< k <<  endl;
				}
			}
		}
		
	}
	return 0;
}

思路: 利用三层for循环获取三遍1-5之间的数据,同时利用if判断限定,三者的值互不相等,不相等就直接把他们输出即可。或者他们三者相等,continue跳出即可,输出其他不同的数据。

结果如下:

image.png