Codeup《算法笔记》2.7指针---查找、比较交换、最值

问题 A: 从大到小指针比较输出两个数

题目描述
输入a和b两个整数,按先大后小的顺序输出a和b。注意请使用指针变量的方式进行比较和输出。

输入
两个用空格隔开的整数a和b。

输出
按先大后小的顺序输出a和b,用空格隔开。
请注意行尾输出换行。

样例输入 Copy

5 9

样例输出 Copy

9 5
#include<bits/stdc++.h>

void swap(int* a,int* b){
	int temp = *a;
	*a = *b;
	*b = temp;
}
int main(){
	int a,b;
	scanf("%d%d",&a,&b);
	int* p1=&a;
	int* p2=&b;
	swap(p1,p2); 
	printf("%d %d",a,b);
	return 0;
} 

问题 B: 从大到小指针比较输出三个数

题目描述
输入a、b、c三个整数,按先大后小的顺序输出a、b和c。注意请使用指针变量的方式进行比较和输出。

输入
三个用空格隔开的整数a、b和c。

输出
按先大后小的顺序输出a、b和c,用空格隔开。
请注意行尾输出换行。

样例输入 Copy

9 0 10

样例输出 Copy

10 9 0

第一种做法:

#include<bits/stdc++.h>
void sort(int* a,int* b,int* c){
//3*2*1=6种情况 
	//假设*a最小 
	if(*a<*b && *a<*c){
		if(*b<*c){
			printf("%d %d %d",*c,*b,*a);
		}
		else if(*c<*b){
			printf("%d %d %d",*b,*c,*a);
		}
	}
	//假设*b最小 
	else if(*b<*a && *b<*c){
		if(*a<*c){
			printf("%d %d %d",*c,*a,*b);
		}
		else if(*c<*a){
			printf("%d %d %d",*a,*c,*b);
		}
	}
	//假设*c最小 
	else if(*c<*a && *c<*b){
		if(*a<*b){
			printf("%d %d %d",*b,*a,*c);
		}
		else if(*b<*a){
			printf("%d %d %d",*a,*b,*c);
		}
	}
}
int main(){
	int a,b,c;
	int *p1=&a;
	int *p2=&b;
	int *p3=&c;
	scanf("%d%d%d",&a,&b,&c);
	sort(p1,p2,p3); 
	printf("\n");
	//printf("%d %d %d",a,b,c);
	return 0;
}

第二种做法:

#include<bits/stdc++.h>
//从大到小输出 
void swap(int* a,int* b,int* c){
	//比较的都是原来的a,b,c;只不过值变化了 
	if(*a < *b){
		int temp = *a;
		*a = *b;
		*b = temp;
	}
	if(*a < *c){
		int temp = *a;
		*a = *c;
		*c = temp;
	}
	if(*b < *c){
		int temp = *b;
		*b = *c;
		*c = temp;
	}
}

int main(){
	int a,b,c;
	int *p1=&a,*p2=&b,*p3=&c;
	scanf("%d%d%d",&a,&b,&c); 
	swap(p1,p2,p3);
	printf("%d %d %d",a,b,c);
	return 0;
}

问题 C: char *a 输出指定位置后的字符串

题目描述
给定字符串定义char *a = “I love China!”,读入整数n,输出在进行了a = a + n这个赋值操作以后字符指针a对应的字符串。

输入
一个整数n,保证0<=n<13.

输出
输出进行了题目描述中赋值操作之后a对应的字符串。
请注意行尾输出换行。

样例输入 Copy

7

样例输出 Copy

China!
#include<bits/stdc++.h>
//输入 
int main(){
	char *a="I love China!";
	int n;
	scanf("%d",&n);
	if(n>=0 && n<=13){
		a=a+n;
		printf("%s",a);
	}
	return 0; 
}

问题 D: 字符串从小到大排序三个

题目描述
输入3个字符串,按从小到大的顺序输出。要求使用指针的方法进行处理。

输入
3行,每行一个用字符串。保证每个字符串的长度不超过20。

输出
按从小到大的顺序输出这3个字符串,每个字符串一行。
请注意行尾输出换行。

样例输入 Copy

China
CLOCK
deal

样例输出 Copy

CLOCK
China
deal
#include<bits/stdc++.h>
//写一个交换字符串的函数 
//用strcpy()函数 
void swap(char* a,char* b){
	char temp[20];
	strcpy(temp,a);
	strcpy(a,b);
	strcpy(b,temp);
}
//从小到大输出 
int main(){
	char a[20],b[20],c[20];
	gets(a);
	gets(b);
	gets(c);
	if(strcmp(a,b)>0){
		swap(a,b);
	} 
	if(strcmp(a,c)>0){
		swap(a,c);
	}
	if(strcmp(b,c)>0){
		swap(b,c);
	}
	puts(a);
	puts(b);
	puts(c);
	return 0;
} 

问题 E: 查找最值,交换

题目描述
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。要求用3个函数实现,分别为输入10个数、进行处理、输出10个数。要求使用指针的方法进行处理。

输入
用空格隔开的10个整数。

输出
输出进行题目描述操作之后的10个整数,每个整数之后输出一个空格。
请注意行尾输出换行。

样例输入 Copy

1 5 2 4 9 0 3 8 7 6

样例输出 Copy

0 5 2 4 6 1 3 8 7 9 
#include<bits/stdc++.h>
//输入函数 
void input(int* a){
	for(int i = 0; i < 10; i++){
		scanf("%d",a+i);
	} 
} 
//输出函数 
void output(int* a){
	for(int i = 0; i < 10; i++){
		printf("%d ",*(a+i));
	}
}

void swap(int* a){
	int max,min;
	max=a[0];
	min=a[0];
	//查找最小值
	for(int i = 0; i < 10; i++){
		if(*(a+i)<min){
			min=*(a+i);
		}
	} 
	//交换最小值
	for(int i = 0; i < 10; i++){
		if(*(a+i)==min){
			int temp = *(a+i);
			*(a+i) = *a;
			*a = temp;
		}
	} 
	//查找最大值
	for(int i = 0; i < 10; i++){
		if(*(a+i)>max){
			max=*(a+i);
		}
	} 
	//交换最大值
	for(int i = 0; i < 10; i++){
		if(*(a+i)==max){
			int temp = *(a+i);
			*(a+i) = a[9];
			a[9] = temp;
		}
	} 
	 
}

int main(){
	int a[10];
	input(a);
	swap(a);
	output(a);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值