Last updated on

实验8-指针的应用


小泉的难题

problemId:2105

Description

机械实验班有个同学叫小泉,有一天数学老师给小泉布置了一道个人作业,给小泉M(M<=100)组数据,每组数据有N个正整数(N<=100)让他把每组的N个数按升序排成一行,但由于数的数目比较多,人工做很费时,于是小泉就想到了喜欢编程序的你,请你帮他解决这个问题,可不要让他失望噢。

Input

输入包括M+1行,第一行是两个正整数M、N;M表示总共多少组数据,下面M行每行包含N个正整数。(输入数据之间会用空格隔开)

Ouput

输出包括M行,每行分别对应输入中M组数据的升序序列,数与数之间用一个空格隔开。

samples

<input>—> 2 3 1 3 2 4 2 6 <output>—> 1 2 3 2 4 6

Code

#include <stdio.h>

void sort(int *arr, int N);

int main() {
    int M, N;
    scanf("%d %d", &M, &N);

    for (int i = 0; i < M; i++) {
        int arr[N]; 
        for (int j = 0; j < N; j++)
            scanf("%d", &arr[j]);

        sort(arr, N);

        for (int j = 0; j < N; j++) {
            if(j!=N-1)
            printf("%d ", arr[j]);
            else
                printf("%d", arr[j]);
        }
        if(i!=M-1)
        printf("\n");
    }

    return 0;
}

void sort(int *arr, int N) {
    for (int i = N - 1; i > 0; i--) { 
        for (int j = 0; j < i; j++) {
            if (*(arr + j) > *(arr + j + 1)) {
                int temp = *(arr + j);
                *(arr + j) = *(arr + j + 1);
                *(arr + j + 1) = temp;
            }
        }
    }
}

n个数的排序

problemId:3441

Description

 

LeiQ当上了体育委员,现在老师让他去给班级里的人排队,LeiQ刚学了排序,所以他想以这种方式给班级里的人排队(从矮到高),他想知道排序完成后的结果。

Input

 多组输入,每组的第一行是一个正数n(1<=n<=100),第二行是n个数,表示每一个人的高度。

 

Ouput

输出排序完成后的结果。

samples

<input>—> 3 176 175 174 <output>—> 174 175 176

Code

#include <stdio.h>
#include <string.h>

int main()
{
    int n,a[105],i,j,*p,*q,t;
    while(~scanf("%d",&n))
    {
        for(i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
        }
        for(i=0; i<n; i++)
        {
            for(j=i+1; j<n; j++)
            {
                if(a[i]>a[j])
                {
                    p=&a[i];
                    q=&a[j];
                    t=*p;
                    *p=*q;
                    *q=t;
                }
            }
        }
        for(i=0; i<n; i++)
        {
            if(i==0)
            {
                printf("%d",a[i]);
            }
            else
            {
                printf(" %d",a[i]);
            }
        }
        printf("\n");
    }
    return 0;
}

矩阵下三角元素之和

problemId:1172

Description

输入一个正整数n(1<=n<=10),再输入n*n的矩阵,要求求该矩阵的下三角元素之和。

Input

输入包括n+1行。

第一行为整数n;

接下来的n行为矩阵数据。

Ouput

矩阵的下三角元素之和。

samples

<input>—> 5 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 <output>—> 75

Code


#include<stdio.h>
int  f(int (*p)[10],int n);

int main()
{
    int n,i,j,sum;
    int a[10][10];
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    sum=f(a,n);
    printf("%d",sum);
    return 0;
}


int f(int (*p)[10],int n){
    int result=0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            result+=*(*(p+i)+j);
        }
        
    }
    return result;
}

又见回文

problemId:2560

Description

“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。现在呢,就是让你判断输入的字符串是否是回文串。

### Input

有多组输入,每行输入一串字符,保证所有数据字符串长度之和不会大于 $10 ^ 5$,字符串由大小写英文字母和空格组成,以字符串“2013”作为结束标志。

### Ouput

每行输出一个字符串,如果输入是回文串,输出“YES”,否则输出“NO”(注意:判断的时候空格是不作判断的,详见样例)。

### samples \--> aaaa ggg g lozxvxoMJBCHsTXooXTsHCBJMoxvxzol i am a good acmer 2013 \--> YES YES YES NO ### Code ``` #include #include char s[100001], a[100001]; int main() { while(gets(s)!=EOF) { if(strcmp(s, "2013") == 0) break; int len = strlen(s), j=0,i,flag=1; for(i=0; i
    for(i=0; i<j/2; i++)
        if(a[i] != a[j-i-1]){
                flag = 0;
                break;
            }
    if(flag)
        printf("YES\n");
    else
        printf("NO\n");
}
return 0;

}