1017 -本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
超位数,要用字符串来做。
1029 有两个测试点通不过,待查
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <unordered_map>
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
class Solution{
public:
};
int main()
{
string s1,s2;
vector<char> res;
getline(cin,s1);
getline(cin,s2);
for(int i=0;i<s1.size();i++){
if(s1[i] >= 'a'&&s1[i] <= 'z')
s1[i] -= 32;
}
for(int i=0;i<s2.size();i++){
if(s2[i] >= 'a'&&s2[i] <= 'z')
s2[i] -= 32;
}
unordered_map<char,int> origin,actual;
for(int i=0;i<s1.size();i++)
origin[s1[i]]++;
for(int i=0;i<s2.size();i++)
actual[s2[i]]++;
for(auto it=origin.begin();it!=origin.end();it++){
//cout << " " << it->first << ":" << it->second<<endl;
if(actual[it->first]==0 && it->second>0)
res.push_back(it->first);
}
for(int i=res.size()-1;i>=0;i--)
cout<<res[i];
cout<<endl;
system("pause");
return 0;
}
1062. 最简分数(20)
坑1:不一定是真分数
坑2:一开始用的float N1/N2作为边界,两个点未通过,后来改成double,变成了一个点未通过
#include <stdio.h>
int gcd(int a, int b)
{
for(int r; (r = a % b); a = b, b = r) ;
return b;
}
int main()
{
int N1, N2, M1, M2, K, L, count = 0;
scanf("%d/%d %d/%d %d", &N1, &M1, &N2, &M2, &K);
if(N1 * M2 > N2 * M1)
{
L = N1, N1 = N2, N2 = L;
L = M1, M1 = M2, M2 = L;
}
for(L = N1 * K / M1 + 1; N2 * K > M2 * L; L++) if(gcd(L, K) == 1)
printf("%s%d/%d", count++ ? " " : "", L, K);
return 0;
}
1071题目很简单,一个坑是输出有两个空格,题目给的格式是错的,得按照给的输出样例的格式来。
但是就是有两个测试点通不过。原因是要把game over放在最后。
#include <iostream>
#include <stack>
#include <queue>
#include <math.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <map>
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
void judge(unordered_map<char,int> bad, char c, int flag){
}
int main(void){
int t,k;
cin>>t>>k;
for(int i=0;i<k;i++){
int n1,b,n2;
long long h;
cin>>n1>>b>>h>>n2;
if(t<=0){
cout<<"Game Over";
break;
}
else if(t-h<0){
cout<<"Not enough tokens. Total = "<<t<<"."<<endl;
}
else if((b==1 && n2>n1) || (b==0 && n2<n1) ){
t+=h;
cout<<"Win "<<h<<"! Total = "<<t<<"."<<endl;
}
else{
t-=h;
cout<<"Lose "<<h<<". Total = "<<t<<"."<<endl;
}
}
system("pause");
return 0;
}
advanced
1023. Have Fun with Numbers (20)
超过19位的就要用数组,然而有一个测试点通不过,没找到原因
#include <iostream>
#include <stack>
#include <queue>
#include <math.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <map>
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
void judge(unordered_map<char,int> bad, char c, int flag){
}
int compare(string a,string b)
{
for(int i=0; i<8; i++)
{
if(a[i]-b[i]>0)
return 1;
if(a[i]-b[i]<0)
return 0;
}
return 0;
}
int main(void){
unordered_map<int,int> mp1,mp2;
int num1[40],num2[40];
int i=0;
char c;
while((c=getchar()) != '\n'){
num1[i]=c-'0';
mp1[num1[i]]++;
i++;
}
int f=0; //jinwei
int cnt=i; //weishu
i--;
for(int j=i;j>=0;j--){
int temp=num1[i]*2;
if(temp+f<10){
num2[j]=temp+f;
mp2[num2[j]]++;
f=0;
}
else{
num2[j]=temp-10+f;
mp2[num2[j]]++;
f=1;
}
i--;
}
if(f==1)
mp2[1]++;
int flag=0;
for(auto it=mp1.begin();it!=mp1.end();it++){
if(it->second != mp2[it->first]){
flag=1;
break;
}
}
if(flag == 0){
cout<<"Yes"<<endl;
if(f==1) cout<<1;
for(int p=0;p<cnt;p++)
cout<<num2[p];
}
if(flag == 1){
cout<<"No"<<endl;
if(f==1) cout<<1;
for(int p=0;p<cnt;p++)
cout<<num2[p];
}
system("pause");
return 0;
}
网友评论