[蓝蓝计算机考研算法]-day13学生成绩&阶乘求和

167 阅读2分钟

学生成绩

现有若干个学生(不超过100的数据记录,每个记录包括学号姓名,三科成绩,学号不超过15位, 且有字母。成绩为整数,每名学生的姓名不超过10个字母,且只包含字母,读入n条记录,再按要求输出。

输入描述

学生数量N占一行,每个学生的学号、姓名、三科成绩占一行,空格分开。

输出描述

每个学生的学号、姓名、三科成绩占一行,逗号分开。

示例

输入
a111 zhblue 70 80 90 
b111 newsclan 90 85 75 

输出
2 
a111 zhblue 70 80 90 
b111 newsclan 90 85 75 

思路

  • 将学生的属性定义为一个字符数组,方便遍历输出。

  • (输入不能使用平常的输入了,要用istringstream输入流。)

  • 首先先用字符串s接收每一行,若该行长度为0,则输出,否则可以继续输入。

  • 然后将s作为输入流输入,(istringstream可以利用分隔符(空格)自动分割。所以输入属性时要加空格,不然就当做同一个属性了)然后sum++。

  • 最后利用sum循环输出。

具体实现

#include<bits/stdc++.h>
using namespace std;

struct node{
	string s,n;
	int g1,g2,g3;
}p[100]; //定义结构体数组p[100],其长度是100,相当于要记录100个学生的信息 

int main(){
	string s;
	int sum=0;
	while(getline(cin,s)){
		if(s.size()==0) break;
		istringstream iss; 
		iss.str(s); //将s作为输入流输入  
		iss>>p[sum].s>>p[sum].n>>p[sum].g1>>p[sum].g2>>p[sum].g3;
		sum++;		
	}
	cout<<sum<<endl;
	for(int i=0; i<sum; i++){
		cout<<p[i].s<<" "<<p[i].n<<" "<<p[i].g1<<" "<<p[i].g2<<" "<<p[i].g3<<" "<<endl;
	}
	return 0;
}

小结

  • str函数:将string类型转化为字符串数组。

  • istringstream:c++输入输出控制类,头文件为< sstream >。可以当cin使用。可以以空格为分隔符把该行划分

  • 可以定义结构体数组,来方便循环遍历。

阶乘求和

求和s=1! + 2! + 3! +…+ 10!

思路

首先i从1到10循环,在循环体中计算i的阶乘。在纸上写一下,可找到规律。

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){
	int sum=0;
	for(int i=1; i<=10; i++){
		int sum1=1;
		for(int j=i; j>=1; j--){
			sum1*=j; //计算i的阶乘 
		}
		sum+=sum1; //i的阶乘和 
	}
	cout<<sum;
	return 0;
}