第二天练习 杭电OJ 1062、2104、2734、1170、1197、2629

1062:

废话少说,直接上代码:

#include<iostream>
#include<string.h>
using namespace std;

int main(){
	int n;
	cin>>n;
	char c[n][1000];   //分别存储N段字符于字符数组中,方便代码末尾统一输出
	char item,p;
	p=getchar();       //用于存储n值后面的'\0',使得你在代码输入时可以在n值后面换行
	int m=0,len;
	while(n-->0){
		gets(c[m]);
		int u=0;              //u的作用使得你可以将已经排序的代码和未排序的代码分隔开,避免将前面排序好的一部分代码错误的进行又一次排序
		len=strlen(c[m]);
		for(int i=0;i<len+1;i++)
		if(c[m][i]==' '||c[m][i]=='\0')//每遇到空格或者换行符都对前一部分字符进行排序
		{
			int j=i;
		while(j>1+u)
		{
			for(int k=u+1;k<j;k++)
			{
				item=c[m][k];
				c[m][k]=c[m][k-1];
				c[m][k-1]=item;
			}
			j--;
		}
		u=i+1;//此时u代表空格i的下一位
		}
		m++;
	}
	for(int i=0;i<m;i++)//直接输出
	puts(c[i]);
	return 0;
}

2104:

#include<iostream>
using namespace std;
//由题意可知主要就是判断两个数的最大公因数是否为1
int main()
{
	long n,m;
	while(cin>>n>>m){
		if(n==-1&&m==-1)
		break;
		/*if(n>m)   //血的教训,千万不要去判断n,m的大小
			{*/
			int r=n%m;
			while(r!=0){
				n=m;m=r;r=n%m;
			}
			if(m!=1)
			cout<<"POOR Haha"<<endl;
			else
			cout<<"YES"<<endl;
		//}
	}
	return 0;
}

2734:

#include<iostream>
#include<string.h>
using namespace std;

int main(){
	char p[256];
	int s=0;
	while(gets(p)){
		if(p[0]=='#')
		break;
		int len=strlen(p);
		for(int i=1;i<len+1;i++)
		{
			if(p[i-1]==' ')
			s=s;  //countinue;
			else
			s+=(p[i-1]-64)*i;//直接使用字符对应的ASCII码
	}
		cout<<s<<endl;
		s=0;
	}
	return 0;
}

1170:

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

int main(){
	int k;
	cin>>k;
	char C;
	int A,B;
	while(k-->0){
		cin>>C>>A>>B;
		if(C=='+')
		cout<<A+B<<endl;
		else if(C=='-')
		cout<<A-B<<endl;
		else if(C=='*')
		cout<<A*B<<endl;
		else if(C=='/')
		{
			if(A%B!=0)//本题关键,仅需处理除号的小数部分
			cout<<fixed<<setprecision(2)<<(double)A/B<<endl;
			else
			cout<<A/B<<endl;
		}
	}
	return 0;
}

1197:

#include<iostream>
using namespace std;

int T(int a,int b){     //求a值在b进制下的各个位数的和
	int sum=0;
	while(a!=0){
		sum+=a%b;
		a=a/b;
	}
	return sum;
}
int main(){
	for(int i=1000;i<10000;i++)
	if(T(i,10)==T(i,16)&&T(i,16)==T(i,12))
	cout<<i<<endl;
	return 0;
}

本题不需要考虑得特别复杂,无需将十进制数值转换为其他进制的数,只需求数的其他进制的各个位数的和

2629:

#include<iostream>
#include<string.h>
using namespace std;

int main(){
	int n;
	cin>>n;
	char q;
	q=getchar();//读取n后面的换行
	char p[20];
	while(n-->0){
		gets(p);
		cout<<"He/She is from ";
		if(p[0]=='3'&&p[1]=='3')
		cout<<"Zhejiang";
		else if(p[0]=='1'&&p[1]=='1')
		cout<<"Beijing";
		else if(p[0]=='7'&&p[1]=='1')
		cout<<"Taiwan";
		else if(p[0]=='8'&&p[1]=='1')
		cout<<"Hong Kong";
		else if(p[0]=='8'&&p[1]=='2')
		cout<<"Macao";
		else if(p[0]=='5'&&p[1]=='4')
		cout<<"Tibet";
		else if(p[0]=='2'&&p[1]=='1')
		cout<<"Liaoning";
		else if(p[0]=='3'&&p[1]=='1')
		cout<<"Shanghai";
		cout<<",and his/her birthday is on ";
		cout<<p[10]<<p[11]<<","
		<<p[12]<<p[13]<<","
		<<p[6]<<p[7]<<p[8]<<p[9]
		<<" based on the table."<<endl;
	}
	return 0;
}

PS:参照https://blog.csdn.net/qq_38769551/article/details/102474049刷题计划

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值