1001
#include<bits/stdc++.h>
using namespace std;
int main(){
long long _1,_2,_3;
scanf("%lld%lld",&_1,&_2);
_3=_1+_2;
string _4=to_string(_3);
reverse(_4.begin(),_4.end());
int cnt=0;
string ans="";
for(int i=0;i<_4.size();i++){
/*cnt++;
ans+=_4[i]; *///不够三位是这样会出现错误 题干中会告诉一些特殊情况注意验证
if(cnt==3&&_4[i]!='-'){
ans+=',';
cnt=0;
}//先判后入型可以让他整个都进来的时候不会再误判一次,而是整个都进来直接结束
cnt++;
ans+=_4[i];
}
reverse(ans.begin(),ans.end());
printf("%s",ans.c_str());
return 0;
}
/*-10 -10*/
1005
#include<bits/stdc++.h>
using namespace std;
string b[]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int main(){
string a;
cin>>a;
int sum=0;
for(int i=0;i<a.size();i++){
sum+=a[i]-'0';
}
string ans=to_string(sum);
printf("%s",b[ans[0]-'0'].c_str() );
for(int i=1;i<ans.size();i++){
printf(" %s",b[ans[i]-'0'].c_str() );
}
return 0;
}
1031
#include<bits/stdc++.h>
using namespace std;
char aa[100][100];
int main(){
string a;
cin>>a;
fill(aa[0],aa[0]+100*100,' ');//少了这句不行 本地编译器和pat上的初始化可能不一样版本也未必相同,所以能更细节的处理就更细节的处理
int n1=(a.size()+2)/3;
int n2=a.size()-2*n1;
for(int i=0;i<n1;i++){
aa[i][0]=a[i];
}
for(int i=0;i<n2;i++){
aa[n1-1][i+1]=a[n1+i];
}for(int i=0;i<n1;i++){
aa[n1-1-i][n2+1]=a[n1+n2+i];
}
for(int i=0;i<n1;i++){
for(int j=0;j<2+n2;j++)
printf("%c",aa[i][j]);
printf("\n");
}
return 0;
}
1037
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
int n,m,_5;
scanf("%d",&n);
vector<int> _1,_2,_3,_4;
for(int i=0;i<n;i++){
scanf("%d",&_5);
if(_5>=0){
_1.push_back(_5);
}else{
_2.push_back(_5);
}
}
sort(_1.begin(),_1.end(),cmp);
sort(_2.begin(),_2.end());
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d",&_5);
if(_5>=0){
_3.push_back(_5);
}else{
_4.push_back(_5);
}
}
sort(_3.begin(),_3.end(),cmp);
sort(_4.begin(),_4.end());
int sum=0;
for(int i=0;i<_1.size()&&i<_3.size();i++){
sum+=_1[i]*_3[i];
}
for(int i=0;i<_2.size()&&i<_4.size();i++){
sum+=_2[i]*_4[i];
}
printf("%d",sum);
return 0;
}
1038
#include<bits/stdc++.h>
using namespace std;
bool cmp(string&a,string&b){
return a+b<b+a;
}
vector<string> ans;
int main(){
int n;
string _1;
scanf("%d",&n);
for(int i=0;i<n;i++){
cin>>_1;
ans.push_back(_1);
}
sort(ans.begin(),ans.end(),cmp);
string trans="";
for(int i=0;i<ans.size();i++){
trans+=ans[i];
}
//int cnt=0;
while(trans[0]=='0'&&trans.size()!=1){//不应该是cnt而应该始终是第一个位置
trans=trans.substr(1);//和大整数相加区别是大整数是反转的所以只要cnt--即可,这里没反转第一个位置永远是第一个位置,同时保留size为1的时候
//cnt++;
}
for(int i=0;i<trans.size();i++){
printf("%c",trans[i]);
}
return 0;
}
1073
#include<bits/stdc++.h>
using namespace std;
int main(){
string a,b,c;
cin>>a;
int _1,_2,_3,_4;
if(a[0]=='+'){//首位正负号
_1=1;
}else{
_1=2;
}
for(int i=0;i<a.size();i++){
if(a[i]=='.'){
_2=i;
}
if(a[i]=='E'){
_3=i;
if(a[i+1]=='-'){
_4=2;
}else{
_4=1;
}
}
}
b=a.substr(_2+1,_3-_2-1);
c=a.substr(_3+2);
string ans="";
if(_4==2){
if(_1==2){
ans+="-0.";//此时添加的是字符串不是字符
}else{
ans+="0.";
}
int _5=stoi(c);
for(int i=0;i<_5-1;i++){
ans+='0';
}
ans+=a[1];
ans+=b;
}else{
int _5=stoi(c);
if(b.size()<=_5){
if(_1==2){
ans+='-';
ans+=a[1];
}else{
ans+=a[1];
}
ans+=b;
for(int i=0;i<_5-b.size();i++){
ans+='0';
}
}else{
if(_1==2){
ans+='-';
ans+=a[1];
}else{
ans+=a[1];
}
int i;
for( i=0;i<_5;i++){
ans+=b[i];
}
ans+='.';
for(int j=i;j<b.size();j++){
ans+=b[j];
}
}
}
cout<<ans;
return 0;
}
1077
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
getchar();
string a[n];
int min=100000000;
for(int i=0;i<n;i++){
getline(cin,a[i]);
reverse(a[i].begin(),a[i].end());
if(a[i].size()<min){
min=a[i].size();
}
}
int flag=0;string ans;
for(int i=0;i<min;i++){
char pre=a[0][i];
int j;
for( j=1;j<n;j++){
if(pre==a[j][i]){
pre=a[j][i];
}else{
break;
}
}
if(i==0&&j!=n) flag=1;
if(j!=n) break;
else{
ans+=a[0][i];
}
}
if(flag==1) printf("nai");
else{
reverse(ans.begin(),ans.end());
printf("%s",ans.c_str());
}
return 0;
}
1108
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
double sum=0,_1;
char a[10000],_2[10000];
int cnt=0;
for(int i=0;i<n;i++){
scanf("%s",&a);
sscanf(a,"%lf",&_1);//仍然要加引用 字符到double
sprintf(_2,"%.2lf",_1);//后面两位类型要一致 double 到字符
int flag=1;
for(int i=0;i<strlen(a);i++){
if(a[i]!=_2[i]){
flag=0;
}
}
if(flag==0||_1>1000||_1<-1000){
printf("ERROR: %s is not a legal number\n",a);
}else{
sum+=_1;
cnt++;
}
}
if(cnt==0){
printf("The average of 0 numbers is Undefined\n");
}else if(cnt==1){
printf("The average of 1 number is %.2lf\n",sum);
}else{
double ans=sum/cnt;
printf("The average of %d numbers is %.2lf",cnt,ans);
}
return 0;
}
1061
#include<bits/stdc++.h>
using namespace std;
string a[]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
int main(){
string _1[4];
for(int i=0;i<4;i++){
cin>>_1[i];
}
int _2,_3,_4,flag=0;
for(int i=0;i<_1[0].size()&&i<_1[1].size();i++){
if(flag==0&&_1[0][i]>='A'&&_1[0][i]<='G'){//7天A--G 测试点4
if(_1[0][i]==_1[1][i]){
_2=_1[0][i]-'A';
flag=1;//上面刚准备的钥匙不能这次就用 这次要不要用 要不要加else
}
} else if(flag==1&&(isdigit(_1[0][i])||_1[0][i]>='A'&&_1[0][i]<='N')){//应该是else if 上面的flag会影响下面
if(_1[0][i]==_1[1][i]){
if(isdigit(_1[0][i]))
_3=_1[0][i]-'0';
else{
_3=_1[0][i]-'A'+10;
}
break;//及时退出而不是取最后一个符合条件的
}
}
}
for(int i=0;i<_1[2].size()&&i<_1[3].size();i++){
if(isalpha(_1[2][i])){
if(_1[2][i]==_1[3][i]){
_4=i;
break;
}
}
}
printf("%s %02d:%02d",a[_2].c_str(),_3,_4);
return 0;
}
sscanf sprintf 应用
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[1000],_2[1000];
double _1;
scanf("%s",&a);
sscanf(a,"%lf",&_1);//仍然要加引用 字符到double
sprintf(_2,"%.2lf",_1);//后面两位类型要一致 double 到字符
cout<<_1<<endl;
cout<<_2<<endl;
return 0;
}
/*
aaa //非法输入由于char 与double 输出的不同能够屏蔽掉 一个char 一个数肯定不同 本质是a和字符数组_2的比较
4.94066e-324
0.00
*/
字符串处理一些小细节见注释
9道