实验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 \