【数组练习】

1、计算数据的方差

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int n;
double a[10023],ave,sq;

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lf",&a[i]);
        ave+=a[i];
    }
    ave/=n;
    for(int i=1;i<=n;i++)
        sq+=(a[i]-ave)*(a[i]-ave);
    sq/=n;
    printf("%.5lf %.5lf",ave,sq);
    return 0;
}

2、年龄与疾病 

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
/*
1-18: 20.00%
19-35: 20.00%
36-60: 20.00%
Over60: 40.00%
*/

int main()
{
    int n;
    double a=0,b=0,c=0,d=0;    
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int x;
        scanf("%d",&x);
        if(x<=18) a+=1;
        else if(x<=35) b+=1;
        else if(x<=60) c+=1;
        else d+=1;
    }
    a/=n; b/=n; c/=n; d/=n;
    printf("1-18: %.2lf%%\n",a*100);
    printf("19-35: %.2lf%%\n",b*100);
    printf("36-60: %.2lf%%\n",c*100);
    printf("Over60: %.2lf%%",d*100);
    return 0;
}

3、人民币支付 

#include <stdio.h>
#include <math.h>
int S;

int main()
{
    scanf("%d",&S);
    printf("%d\n",S/100);
    S%=100;
    printf("%d\n",S/50);
    S%=50;
    printf("%d\n",S/20);
    S%=20;
    printf("%d\n",S/10);
    S%=10;
    printf("%d\n",S/5);
    S%=5;
    printf("%d",S);
    return 0;
}

4、二维数组右上左下遍历 

#include <stdio.h>
#include <math.h>
int n,m;
int a[101][101];

int main()
{
    int i,j;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++) scanf("%d",&a[i][j]);
    i=1,j=1;
    int kk=2,fl=0;
    while(1)
    {
        printf("%d\n",a[i][j]);
        if(i==n && j==m) break;
        if(j==1 || i==n)
        {
            if(kk<=m && !fl)
            {
                i=1; j=kk;
                kk++;                
            }
            else if(!fl)
                kk=2,i=2,j=m,fl=1;
            else
            {
                kk++; i=kk; 
                j=m;
            }
        }
        else i++,j--;
    }
    return 0;
}

5、二维数组回形遍历 

#include <stdio.h>
#include <math.h>
int n,m;
int a[101][101],map[300][300];
int dirx[]={0,0,1,0,-1};
int diry[]={0,1,0,-1,0};

int main()
{
	int i,j;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++) scanf("%d",&a[i][j]);
	i=1,j=1;
	int fl=1,ans=0;
	while(1)
	{
		map[i][j]=1; ans++;
		printf("%d\n",a[i][j]);
		if(ans==n*m) break;
		i+=dirx[fl],j+=diry[fl];
		if(map[i][j] || i<1 || i>n || j<1 || j>m)
		{
			i-=dirx[fl],j-=diry[fl];
			fl++; if(fl>4) fl%=4;
			i+=dirx[fl],j+=diry[fl];
		}
	}
	return 0;
}

 

6、矩阵转置

#include <stdio.h>
#include <math.h>
int n,m;
int a[101][101],map[300][300];

int main()
{
    int i,j;
    scanf("%d",&n);
    m=n;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++) scanf("%d",&a[i][j]);
    for(j=1;j<=m;j++)
    {
        for(i=1;i<=n;i++)
        {
            printf("%d",a[i][j]);
            if(i!=n) printf("\t");            
        }
        printf("\n");        
    }
    return 0;
}

 

7、矩阵交换行 

#include <stdio.h>
#include <math.h>
int n,m;
int a[23][23];

int main()
{
    int i,j;
    for(i=1;i<=5;i++)
        for(j=1;j<=5;j++) scanf("%d",&a[i][j]);
    scanf("%d%d",&n,&m); n++,m++;
    if(n<1 || n>5 || m<1 || m>5)
    {
        printf("error");
        return 0;
    }
    int tmp=0;
    for(j=1;j<=5;j++) tmp=a[n][j],a[n][j]=a[m][j],a[m][j]=tmp;
    for(i=1;i<=5;i++)
    {
        for(j=1;j<=5;j++)
        {
            printf("%d",a[i][j]);
            if(j!=5) printf(" ");            
        }
        printf("\n");
    }
    return 0;
}

  

 

posted @ 2019-12-15 20:46  Captain_fcj  阅读(161)  评论(0编辑  收藏  举报