1. 程式人生 > >大一寒假訓練一(二維陣列和結構體)

大一寒假訓練一(二維陣列和結構體)

基礎題就不解釋了,稍微要思考的題再註釋一下。

nefu 951 二維矩陣最大值

#include <stdio.h>
int main()
{
    int i,j,m,n,max1,max2,max,a[100][100];
    while(scanf("%d%d",&m,&n)!=-1)
    {
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=n;j++)
            scanf("%d",&a[i][j]);
        }
        max=
a[1][1]; max1=max2=1; for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { if(a[i][j]>max) { max=a[i][j]; max1=i; max2=j; } } } printf
("%d %d %d\n",max1,max2,max); } return 0; }

nefu 953 矩陣相加

#include <stdio.h>
int main()
{
    int a[100][100],b[100][100],i,j,m,n,s[100][100];
    while(scanf("%d%d",&m,&n)!=-1)
    {
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=n;j++)
            scanf("%d",&a[
i][j]); } for(i=1;i<=m;i++) { for(j=1;j<=n;j++) scanf("%d",&b[i][j]); } for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { s[i][j]=a[i][j]+b[i][j]; if(j==n)printf("%d\n",s[i][j]); else printf("%d ",s[i][j]); } } } return 0; }

nefu 952 二維矩陣對角線和

#include <stdio.h>
int main()
{
    int a[100][100],i,j,m,s;
    while(scanf("%d",&m)!=-1)
    {
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=m;j++)
                scanf("%d",&a[i][j]);
        }
        s=0;
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=m;j++)
            {
                if(i==j)
                    s=s+a[i][j];
                if(i+j==m+1)
                    s=s+a[i][j];
            }
        }
        printf("%d\n",s);
    }
    return 0;
}

nefu 954 矩陣相乘

#include <stdio.h>
int main()
{
    int m,i,j,k,a[20][20],b[20][20];
    while(scanf("%d",&m)!=-1)
    {
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=m;j++)
                scanf("%d",&a[i][j]);
        }
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=m;j++)
                scanf("%d",&b[i][j]);
        }
        int s[20][20]={0};
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=m;j++)
            {
                for(k=1;k<=m;k++)
                s[i][j]=s[i][j]+a[i][k]*b[k][j];
            }
        }
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=m;j++)
            {
                if(j==m)printf("%d\n",s[i][j]);
                else printf("%d ",s[i][j]);
            }
        }
    }
    return 0;
}

nefu 955 五人幫

#include <stdio.h>
int main()
{
    int m,n,i,j,k,a[11][11],s,max;
    while(scanf("%d%d",&m,&n)!=-1)
    {
        for(i=0;i<=m+1;i++)
        {
            for(j=0;j<=n+1;j++)
            {
                    if(i>=1&&i<=m&&j>=1&&j<=n)scanf("%d",&a[i][j]);
                    else a[i][j]=0;//在原二維矩陣外面再加一層0
            }
        }
        max=0;
        for(i=0;i<=m+1;i++)
        {
            for(j=0;j<=n+1;j++)
            {
                if(i>=1&&i<=m&&j>=1&&j<=n)
                {
                    s=a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1];
                    if(s>max)
                    max=s;
                }
            }
        }
        printf("%d\n",max);
    }
    return 0;
}

nefu 1053 cc-test9-01結構體應用

#include <bits/stdc++.h>
using namespace std;
struct student
{
    char num[10],name[30];
    double score;
};
int main()
{
    int n,i;
    while(scanf("%d",&n)!=-1)
    {
        student stu[100];
        getchar();
        for(i=1;i<=n;i++)
        scanf("%s %[^\n] %lf",stu[i].num,stu[i].name,&stu[i].score);
        for(i=1;i<=n;i++)
        printf("%s  %s  %.2lf\n",stu[i].num,stu[i].name,stu[i].score);
    }
    return 0;
}

學了結構體還是很有用的,學了之後能輕鬆解決多個字串問題

這裡學到了一種很好的不跳過空格輸入字串的寫法

char s[100];
scanf(" %[^\n]",s);

這就比用gets(s)不跳過空格輸入字串好用多了。

nefu 1637 身高問題

#include <bits/stdc++.h>
using namespace std;
struct student
{
    char name[30];
    int h,num;
};

int main()
{
    int n,i,j,max;
    student t,stu[200];
    while(scanf("%d",&n)!=-1)
    {
        getchar();
        for(i=1;i<=n;i++)
        scanf("%s%d%d",stu[i].name,&stu[i].h,&stu[i].num);
        for(i=1;i<=n;i++)
        {
            for(j=i+1;j<=n;j++)
            {
                if(stu[j].num<stu[i].num)
                {
                    t=stu[i];
                    stu[i]=stu[j];
                    stu[j]=t;
                }
            }
        }
        max=0;
        for(i=1;i<=n;i++)
        {
            if(stu[i].h>max)
            max=stu[i].h;
        }
        for(i=1;i<=n;i++)
        {
            if(stu[i].h==max)
            {
                printf("%s %d %d\n",stu[i].name,stu[i].h,stu[i].num);
                break;
            }
        }
    }
    return 0;
}

nefu 1638 成績統計

#include <bits/stdc++.h>
using namespace std;
struct student
{
    char a[2],b[10];
    int x;
};

int main()
{
    int n,i,s,sum;
    student stu[1001];
    while(scanf("%d",&n)!=-1)
    {
        getchar();
        s=sum=0;
        for(i=1;i<=n;i++)
        {
            scanf("%s",stu[i].a);
            if(strcmp(stu[i].a,"C")==0)
            {
                scanf("%s",stu[i].b);
                s++;
            }
            if(strcmp(stu[i].a,"N")==0)
            {
                scanf("%d",&stu[i].x);
                sum=sum+stu[i].x;
            }
        }
        printf("%d %d\n",s,sum/(n-s));
    }
    return 0;
}

寒假培訓第一天就是這麼些題了,做出結構體的題還是挺有成就感的。
第一篇部落格就到這裡了,繼續努力刷題,堅持,加油!!!
繼續萌新的成長之路!!!