杭电OJ刷题Day2简单操作(2000-2011、2039)

在这里插入图片描述

二、简单操作

2000 ASCII排序

在这里插入图片描述

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	char a,b,c,temp;
	while(cin>>a>>b>>c){
		if(a>b){	//a<b
			temp=b;
			b=a;
			a=temp;
		}
		if(a>c){	//a<c
			temp=c;
			c=a;
			a=temp;
		}
		if(b>c){	//b<c
			temp=c;
			c=b;
			b=temp;
		}
		cout<<a<<" "<<b<<" "<<c<<endl;
	}
	return 0;
}

获取数组长度

在这里插入图片描述
实验发现
在这里插入图片描述
但是用应该用int length=strlen(str); (20211210改)

	char str[1000];
	gets(str);
	//int length=sizeof(str)/sizeof(str[0]);	//输出1000
	int length=strlen(str);

冒泡排序

#include<iostream>
#include<cstdio>
using namespace std;

void BubbleSort(char a[]){
	int length=sizeof(a)/sizeof(a[0])-1;	//数组长度
	int m=length-1;			//注意这里,因为要使下面的i+1<m,所以长度要减1
	int flag=1;	//标记每轮是否有交换
	while( (m>0) && flag){
		flag=0;
		for(int i=0;i<m;i++){
			if(a[i]>a[i+1]){
				char t;
				t=a[i];a[i]=a[i+1];a[i+1]=t;	//交换a[i]和a[i+1]
				flag=1;
			}
		}
		m--;
	}
}
int main(){
	char a[3],temp;
	while(cin>>a[0]>>a[1]>>a[2]){
		int n=sizeof(a)/sizeof(a[0]);	//数组长度
		BubbleSort(a);
		cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
	}
	return 0;
}

直接插入排序

#include<iostream>
#include<cstdio>
using namespace std;

void InsertSort(char a[],int length){
	for(int i=2;i<length;i++){
		if(a[i]<a[i-1]){	//后一个比前一个小,则依次与i-2,i-3...比较,直至找到比该值大的
			//将a[i]放到a[0],然后将a[i-1]的值后移到a[i]
			a[0]=a[i];
			a[i]=a[i-1];
			int j;
			for(j=i-2;a[0]<a[j];--j){
				a[j+1]=a[j];
			}
			a[j+1]=a[0];
		}
	}
}
int main(){
	char a[4],temp;
	while(cin>>a[1]>>a[2]>>a[3]){
		int n=sizeof(a)/sizeof(a[0])-1;	//数组长度
		InsertSort(a,4);
		cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
	}
	return 0;
}

折半插入排序

#include<iostream>
#include<cstdio>
using namespace std;

void BInsertSort(char a[],int length){
	//折半查找插入位置
	int low,high,mid;
	for(int i=2;i<length;i++){
		a[0]=a[i];
		low=1;
		high=i-1;
		while(low<=high){
			mid=(low+high)/2;
			if(a[0]<a[mid]) high=mid-1;
			else low=mid+1;
		}
		for(int j=i-1;j>=high+1;--j){
			a[j+1]=a[j];
		}
		a[high+1]=a[0];
	}
}
int main(){
	char a[4],temp;
	while(cin>>a[1]>>a[2]>>a[3]){
		int n=sizeof(a)/sizeof(a[0])-1;	//数组长度
		BInsertSort(a,4);
		cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
	}
	return 0;
}

快排

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>

using namespace std;

int Paration(char a[],int low,int high){
	a[0]=a[low];
	char key=a[low];
	while(low<high){
		while(low<high && a[high]>=key) --high;
		a[low]=a[high];
		while(low<high && a[low]<=key) ++low;
		a[high]=a[low];
	}
	a[low]=key;
	return low;
}
void QuickSort(char a[],int low,int high){
	if(low<high){
		int privotloc=Paration(a,low,high);
		QuickSort(a,low,privotloc-1);
		QuickSort(a,privotloc+1,high);
	}
}
int main(){
	char a[4],temp;
	while(cin>>a[1]>>a[2]>>a[3]){
		int n=sizeof(a)/sizeof(a[0]);	//数组长度
		QuickSort(a,1,n-1);
		cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
	}
	return 0;
}

简单选择排序

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>

using namespace std;

//简单选择排序
void SelectSort(char a[],int n){
	for(int i=1;i<n;i++){
		int k=i;
		for(int j=i+1;j<=n;j++){
			if(a[j]<a[k]) k=j;	//和a[k]进行比较
		}
		if(k!=i){
			int temp=a[k];
			a[k]=a[i];
			a[i]=temp;
		}
	}
}

int main(){
	char a[4],temp;
	while(cin>>a[1]>>a[2]>>a[3]){
		int n=sizeof(a)/sizeof(a[0]);	//数组长度
		SelectSort(a,n-1);
		cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
	}
	return 0;
}

2001 计算两点间的距离

在这里插入图片描述

C输出小数点后2位

#include<iostream>
#include<cmath>
using namespace std;

int main(){
	double x1,x2,y1,y2,d;
	while(cin>>x1>>y1>>x2>>y2){
		d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
		printf("%.2f\n",d);
	}
	return 0;
}

C++输出小数点后2位

在这里插入图片描述

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

int main(){
	double x1,x2,y1,y2,d;
	while(cin>>x1>>y1>>x2>>y2){
		d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
		cout.setf(ios::fixed);
		cout<<fixed<<setprecision(2)<<d<<endl;
	}
	return 0;
}

2002 计算球体积

在这里插入图片描述

#include<iostream>
#include<cmath>
#define PI 3.1415927

using namespace std;

int main(){
	double r,V;
	while(cin>>r){
		V=PI*r*r*r*4/3;
		printf("%.3f\n",V);
	}
	return 0;
}

?
在这里插入图片描述

2003 求绝对值

在这里插入图片描述

#include<iostream>
#include<cmath>
#define PI 3.1415927

using namespace std;

int main(){
	double a,b;
	while(cin>>a){
		b=a>0?a:-a;
		printf("%.2f\n",b);
	}
	return 0;
}

2004 成绩转换(switch)

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<cmath>

using namespace std;

int main(){
	int a;
	while(cin>>a){
		if(a<0 || a>100)
			cout<<"Score is error!"<<endl;
		else{
			int b=a/10;
			char grade;
			switch(b){
			case 10:
			case 9:grade='A';break;
			case 8:grade='B';break;
			case 7:grade='C';break;
			case 6:grade='D';break;
			case 5:
			case 4:
			case 3:
			case 2:
			case 1:
			case 0:grade='E';break;
			}
			cout<<grade<<endl;
		}
	}
	return 0;
}

2005 第几天(!)

在这里插入图片描述

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>

using namespace std;
bool IsRYear(int year){
	if((year%4==0 && year%100!=0) || (year%400==0))
		return true;
	return false;
}

int main(){
	string a;
	int year,month,day;
	int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};	//假设不是闰年
	while(cin>>a){
		int m,n;
		m=a.find_first_of('/');
		n=a.find_last_of('/');
		year=atoi(a.substr(0,m).c_str());	//string转int
		month=atoi(a.substr(m+1,n).c_str());
		day=atoi(a.substr(n+1).c_str());
		if(IsRYear(year)){	//判断是否为闰年
				days[1]=29;
		}
		else
			days[1]=28;
		int days_sum=day;
		for(int i=2;i<=month;i++){
			days_sum+=days[i-1-1];
		}
		cout<<days_sum<<endl;
	}
	return 0;
}

int转string

https://www.cnblogs.com/smile233/p/8379802.html
在这里插入图片描述
在这里插入图片描述

string转int

在这里插入图片描述
在这里插入图片描述
https://www.cnblogs.com/hhccdf/p/4334597.html
在这里插入图片描述

2006 求奇数的乘积

在这里插入图片描述

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>

using namespace std;

int main(){
	int n;
	int *a;
	while(cin>>n){
		a=new int[n];
		int m=1;
		for(int i=0;i<n;i++){
			cin>>a[i];
			if(a[i]%2!=0){
				m*=a[i];
			}
		}
		cout<<m<<endl;
	}
	return 0;
}

动态数组

https://www.cnblogs.com/buanxu/p/12757291.html
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//一维动态数组
int *p;
p=new int[2];/*创建了一个长度为n的动态数组,并且返回这个数组的首地址给p,p就指向了这个动态数组,可以通过指针p来操作数组,因为创建的动态数组并没有名字,只返回了首地址给p,所以可以把p看作是这个动态数组的名字 */
delete []p;

//二维动态数组
int **p; //2*3
p=new int*[2];
for(int i=0;i<2;i++){
	p[i]=new int[3];
}
for(int i=0;i<2;i++){
	delete []p[i];
}
delete []p;

不用动态数组

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>

using namespace std;

int main(){
	int n;
	int a;
	while(cin>>n){
		int m=1;
		for(int i=0;i<n;i++){
			cin>>a;
			if(a%2!=0){
				m*=a;
			}
		}
		cout<<m<<endl;
	}
	return 0;
}

2007 平方和与立方和

在这里插入图片描述

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>

using namespace std;

int main(){
	int n,m;
	while(cin>>n>>m){
		int a2=0,a3=0;
		//题目没说n和m的大小关系
		if(n>m){
			int temp=n;
			n=m;
			m=temp;
		}
		for(int i=n;i<=m;i++){
			if(i%2==0){
				a2+=i*i;
			}
			else{
				a3+=i*i*i;
			}
		}
		cout<<a2<<" "<<a3<<endl;
	}
	return 0;
}

2008 数值统计

在这里插入图片描述

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>

using namespace std;

int main(){
	int n;
	while(cin>>n){
		if(n==0) break;
		int a1=0,a2=0,a3=0;
		double a;
		for(int i=0;i<n;i++){
			cin>>a;
			if(a<0) a1++;
			else if(a==0) a2++;
			else a3++;
		}
		cout<<a1<<" "<<a2<<" "<<a3<<endl;
	}
	return 0;
}

2009 求数列的和

在这里插入图片描述
81+9+3+根号3

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>

using namespace std;

int main(){
	int n,m;
	double temp;
	while(scanf("%d %d",&n,&m)!=EOF){
		double sum=n;
		temp=n;
		for(int i=0;i<m-1;i++){
			temp=sqrt(temp);
			sum+=temp;
		}
		printf("%.2f\n",sum);
	}
	return 0;
}

2010 水仙花数

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>

using namespace std;

int main(){
	int n,m;
	int a1,a2,a3;	//百位数,十位数,个位数
	while(scanf("%d %d",&n,&m)!=EOF){
		if(n>m){
			int temp=n;
			n=m;
			m=temp;
		}
		int a[1000];	//100<=m<=n<=999
		int j=0;
		for(int i=n;i<=m;i++){
			a1=i/100;
			a2=(i-a1*100)/10;
			a3=i%10;
			if(a1*a1*a1+a2*a2*a2+a3*a3*a3==i){
				a[j]=i;
				j++;
			}
		}
		if(j==0) printf("no\n");
		else{
			for(int i=0;i<j-1;i++)
				printf("%d ",a[i]);
			printf("%d\n",a[j-1]);
		}

	}
	return 0;
}

2011 多项式求和

在这里插入图片描述

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>

using namespace std;

int main(){
	int n;
	double sum;
	while(scanf("%d",&n)!=EOF){
		int *a=new int[n];
		for(int i=0;i<n;i++){
			cin>>a[i];
		}
		for(int i=0;i<n;i++){
			sum=0;
			for(int j=1;j<=a[i];j++){
				if(j%2==0) sum-=1.0/j;	//1.0
				else sum+=1.0/j;
			}
			printf("%.2f\n",sum);
		}

	}
	return 0;
}

2039 三角形

在这里插入图片描述没有说边是整数。。。

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>

using namespace std;

int main(){
	int n;
	double a,b,c;	//没有说边是整数
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a>>b>>c;
		//if(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a) //直角三角形
		if(a+b>c && a+c>b && b+c>a)	//任意两边大于第三边
			cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
	}
	system("pause");
	return 0;
}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值