东华复试oj题------6-10题

6.分数统计

分数统计

作者: Turbo时间限制: 1S章节: 一维数组

问题描述 :

给定一个百分制成绩T,将其划分为如下五个等级之一:
  90100为A,8089为B,7079为C,6069为D,0~59为E
  现在给定的输入中包含若干百分制成绩(成绩个数不超过100),请你统计五个等级段的人数,并找出人数最多的那个等级段,按照从大到小的顺序输出该段中所有人成绩(保证人数最多的等级只有一个)。

输入说明 :

两行,第一行为n,表示将输入n个分数,

第二行为n个0~100的正整数,用空格隔开

输出说明 :

第一行为5个正整数,分别表示A,B,C,D,E五个等级段的人数
  第二行一个正整数,表示人数最多的等级段中人数
  接下来一行若干个用空格隔开的正整数,表示人数最多的那个等级中所有人的分数,按从大到小的顺序输出。

输入范例 :

10
100 80 85 77 55 61 82 90 71 60

输出范例 :

2 3 2 2 1
3
85 82 80
思路:肯定有更好的想法,我这搞了三个数组惭愧惭愧,但思路很简单···

#include<iostream>
#include<algorithm>
using namespace std;

int cmp(int x,int y)
{
	return x>y;
}
int main()
{
	int n,i,a[1005];
	while(cin>>n)
	{
		int b[6]={0},c[6]={0};
		for(i=0;i<n;i++) cin>>a[i];
		//int a=0,b=0,c=0,d=0,e=0;
		for(i=0;i<n;i++)
		{
			if(a[i]>=0 && a[i]<60) b[5]++;
			if(a[i]>59 && a[i]<70) b[4]++;
			if(a[i]>69 && a[i]<80) b[3]++;
			if(a[i]>79 && a[i]<90) b[2]++;
			if(a[i]>89 && a[i]<=100) b[1]++;
		}
		for(int j=1;j<6;j++) c[j]=b[j];
		cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<" "<<b[5]<<endl;
		sort(c,c+6,cmp);
		int ans;
		cout<<c[0]<<endl;
		for(i=1;i<6;i++)
		{
			if(b[i] == c[0])
			{
				ans=i;
				break;
			}
		}
		sort(a,a+n,cmp);
		int flag=0;
		for(i=0;i<n;i++)
		{
			
			if(ans==1 && a[i] >89 && a[i]<=100)  
			{
				if(flag!=0) cout<<" ";
				cout<<a[i];
				flag=1; 
			}

			else if(ans==2 && a[i] >79 && a[i]<90)  
		   {
				if(flag!=0) cout<<" ";
				cout<<a[i];
				flag=1; 
		  	}
			else if(ans==3 && a[i] >69 && a[i]<80)  
			     {
				if(flag!=0) cout<<" ";
				cout<<a[i];
				flag=1; 
			}
			else if(ans==4 && a[i] >59 && a[i]<70)  
			    {
				if(flag!=0) cout<<" ";
				cout<<a[i];
				flag=1; 
			}
			else if(ans==5 && a[i] >0 && a[i]<60)  
			    {
				if(flag!=0) cout<<" ";
				cout<<a[i];
				flag=1; 
			}
		}
		cout<<endl;
		
	}
	return 0;
}

 

7.蛇形方阵

问题描述 :

输出一个如下的n阶方阵。例如,若读入11,则输出:

输入说明 :

输入一个正整数n(n<20),表示需要输出n阶方阵。

输出说明 :

共输出n行n列,每个整数占4位,不足4位则左边补空格。

每行的最后无空格。

无多余空行。
不足左边补空格%4d,另每两个数据元素之间没有空格
 

思路:补空格这个操作我是真不知道这个tips;思路就是把从0开始的奇数行反过来就好啦!

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int main(){
	int n,k=1,i,j,temp;
	int a[20][20];
	cin>>n;
	for(i=0;i<n;i++){      //看好!i是从0开始的; 
		for(j=0;j<n;j++){
			a[i][j]=k;            //先把数存起来; 
			k++;
		}
		
		if(i%2==1){              //每个奇数行都换过来; 
			for(j=0;j<n/2;j++){
				temp=a[i][j];
				a[i][j]=a[i][n-1-j];
				a[i][n-1-j]=temp;
			}
		}
	}
	
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			printf("%4d",a[i][j]);   //占四个字节; 
		}
		cout<<endl;
	}
	return 0;
}

8.n层正方形

问题描述 :

编写程序,输出n层正方形图案。正方形图案最外层是第一层,每层用的数字和层数相同。

输入说明 :

正方形图案的层数n(小于等于25)。

输出说明 :

2n-1行2n-1列数据,同一行上的数据之间用一个空格分隔。

比如3层图案,最外层都是1,里面一层都是2,最里面一层只有一个数3,所以是5×5的矩形,如下:

1 1 1 1 1

1 2 2 2 1

1 2 3 2 1

1 2 2 2 1

1 1 1 1 1

输入范例:
3
输出范例:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
思路:就扫描扫描扫描!一遍一遍扫!

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;

int main(){
	int n,k,i,j;
	int a[50][50];
	cin>>n;
	int sq=2*n-1;
	k=1;
	
	while(k<=n){          //一轮一轮的扫描 
		for(i=k-1;i<=sq-k;i++){
			for(j=k-1;j<=sq-k;j++){
				a[i][j]=k;
			}
		}
		k++;
	}
	for(i=0;i<sq;i++)
		for(j=0;j<sq;j++){
			cout<<a[i][j];
			if(j!=sq-1) cout<<" ";
			
			else cout<<endl;
	}
	return 0;
}


9.二维数组右上左下遍历

总时间限制: 

1000ms

 

内存限制: 

65536kB

描述

给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按从左上到右下的对角线顺序遍历整个数组。

输入

输入的第一行上有两个整数,依次为row和col。
余下有row行,每行包含col个整数,构成一个二维整数数组。
(注:输入的row和col保证0 < row < 100, 0 < col < 100)

输出

按遍历顺序输出每个整数。每个整数占一行。

样例输入

3 4
1 2 4 7
3 5 8 10
6 9 11 12

样例输出

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main(){
	
	int m,n;
	cin>>m>>n;
	int a[101][101];
	int i,j,c,r;
	for(i=0;i<m;i++)
		for(j=0;j<n;j++)
	        cin>>a[i][j];
	for(j=0;j<n;j++){       //判断前N行的 
		r=0;
		c=j;          //r控制上,j控制往下走; 
		while(r<m&&c>=0)    //输出的范围还是m以内; 
			cout<<a[r++][c--]<<" ";     //只能说好家伙 
	} 
	for(i=1;i<m;i++){
	
		r=i;
		c=n-1;
		while(r<m&&c>=0)
			cout<<a[r++][c--]<<" ";
				
}
	return 0;
}

10.特殊的矩阵运算

问题描述 :

输入m个方阵,方阵的元素是非0整数。对于n阶方阵A,明明现在需要进行特殊的运算。

例如:

A: 5 1 3

5 8 7

2 6 9

方阵A有两条对角线:从左上角到右下角的对角线,元素为5 8 9,以及从左下角到右上角的对角线,元素为2 8 3。

求A两条对角线元素相乘的和(对角线积),52+88+9*3=101;

求A两条对角线元素相除的和(对角线商):5/2+8/8+9/3=6。 (注意:求对角线商时用整除,所以5/2的结果为2。)

输入说明 :

输入由多组数据组成。

第一行有一个整数m,表示接下来有m组测试数据;
1
第二行有一个整数n,表示n阶方阵,0 < n < 10;
1
接下来的m行,每行有n*n个非0整数,整数间用空格分隔,每行对应一个矩阵。例如上述方阵A的输入格式为:5 1 3 5 8 7 2 6 9
1
输出说明 :

对每个矩阵,输出两个整数,表示对角线积和对角线商,用空格分隔。每个矩阵的输出结果占一行。

输入范例:
2
3
5 1 3 5 8 7 2 6 9
-2 3 2 1 2 49 22 1 2

输出范例 :
101 6
-36 2
 

#include<iostream>
#include<stdlib.h>
using namespace std;

int main(){
	int m,n,i,j,a[20][20],sum1,sum2,x1,x2;
	cin>>n>>m;
	
	while(n--)
	{
		for(i=0;i<m;i++)
		{
			for(j=0;j<m;j++)
			{
				cin>>a[i][j];
			}
		}
		
//从列先开始遍历
		sum1=0;sum2=0;
		for(j=0;j<m;j++)
		{
			x1=a[j][j];       //这就是左上到右下的元素值,易找
			for(i=0;i<m;i++)
			{
				if((m-1)==i+j)
				{
					x2=a[i][j];//这是左下到右上的元素
					break;
				}
				
			}
			sum1+=x1*x2;
			sum2+=(x1/x2);
		}
	
         cout<<sum1<<" "<<sum2<<endl;
	}

	return 0;
}

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值