PAT甲级(一)(1001-1002)

1001

在这里插入图片描述

#include <iostream>
#include <vector>
#include <iomanip>
#include <math.h>
#include <string>
#include <sstream>
#include <stack>

 using namespace std;


 int main(){
   long long a,b;
   cin>>a>>b;
   string st;
   stringstream ss;
   ss<<(a+b);
   ss>>st;
   int th_count=0;
   stack <char> sta;
   for (int i=st.size()-1;i>=0;i--){
        th_count++;
        sta.push(st[i]);
        if (i == 0){break;}
        if (st[i-1] == '-'){sta.push(st[i-1]);break;}
        if (th_count % 3 == 0&&th_count!=0){sta.push(',');}
   }
   while (!sta.empty()){cout<<sta.top();sta.pop();}
   return 0;
 }

总结陈词

1、long,int 和string的转化。参考链接。
https://blog.csdn.net/sunxianliang1/article/details/72897045

1002

在这里插入图片描述
下面这段代码显示部分正确, 原因未知,得分(17/25)

#include <iostream>
#include <vector>
#include <iomanip>
#include <math.h>
#include <string>
#include <sstream>
#include <stack>

 using namespace std;


 int main(){
    float x;
    vector <float> vc1;
    vector <float> vc2;
    vector <float> result;
    int num;
    cin>>num;
    while(num--){
        cin>>x;
        vc1.push_back(x);
        cin>>x;
        vc1.push_back(x);
    }
    cin>>num;
    while(num--){
        cin>>x;
        vc2.push_back(x);
        cin>>x;
        vc2.push_back(x);
    }
    unsigned int length;
    if (vc1.size()<vc2.size()){length = vc1.size();}
    else {length = vc2.size();}
    unsigned int i,j;
    i=0;j=0;
    unsigned int length_copy = length;
    float sum=0;
    while(length_copy--){
        if(vc1[i]<vc2[j]){result.push_back(vc2[j]);result.push_back(vc2[++j]);j++;sum++;}
        else if(vc1[i]>vc2[j]){result.push_back(vc1[i]);result.push_back(vc1[++i]);i++;sum++;}
        else{result.push_back(vc1[i]);result.push_back(vc1[++i]+vc2[++j]);i++;j++;sum++;}
        if (i == length){while(j<vc2.size()){result.push_back(vc2[j++]);sum+=0.5;}break;}
        if (j == length){while(i<vc1.size()){result.push_back(vc1[i++]);;sum+=0.5;}break;}
    }
    cout<<setiosflags(ios::fixed) << setprecision(0)<<sum;
    for (unsigned int i=0;i<result.size();i++){
        cout<<' ';
        if (i&1)cout<<setiosflags(ios::fixed) << setprecision(1)<<result[i];
        else{cout<<setiosflags(ios::fixed) << setprecision(0)<<result[i];}
    }
    return 0;
 }

下面方法来自
https://blog.csdn.net/i_hope_soar/article/details/83064733

#include <iostream>
#include <iomanip>
using namespace std;
double a[1005];
int main(){
	int n,k,x,m,count = 0;
	double y;
	cin>>m;
	for(int i = 0; i < m; i++){
		cin>>x>>y;
		a[x] += y;
	}
	cin>>m;
	for(int i = 0; i < m; i++){
		cin>>x>>y;
		a[x] += y;
	}
	for(int i = 0; i < 1001; i++){
		if(a[i] != 0) count++;
	}
	cout<<count;
	for(int i = 1001; i >= 0; i--){
		if(a[i] != 0){
			cout<<" "<<i<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<a[i];
		}
	}
	return 0;
}

总结陈词

1、当如下情况时,++j会优先与cout计算,产生输出错误。

cout<<a[i]<<a[++i];//输出为两个a[i+1]

2、控制小数点位数参考链接
https://www.cnblogs.com/ever17/p/11285358.html
3、没有必要用vector容器,可以直接用数组预定数组空间。虽然有浪费,但是测试能过呀。

发布了12 篇原创文章 · 获赞 0 · 访问量 152

猜你喜欢

转载自blog.csdn.net/weixin_42562498/article/details/104344131