题目链接
正文
第一题,蛮人性的,因为我之前做过更恶心的就是给你键盘的坐标(扯远了)。这一题因为是按字符顺序,所以可以利用ASCII码。
首先转换成数组(非常实用可以写成函数)
int a[100];
void transform(string s){
for(int i=0;i<s.size();i++){
a[i]=int(s[i]-'0');
}
}
然后就进行减法然后把差加起来就搞定。
int sum=0;
for(int i=0;i<s.size()-1;i++){//因为a的长度等于字符串的长度(偷个懒)
if(a[i]>a[i+1]){//主要特判不然就寄了。
sum+=a[i]-a[i+1];
}else{
sum+=a[i+1]-a[i];
}
}
第二题很简单,直接暴力加套公式。
int main(){
int n;
cin>>n;
int a[n][2];
for(int i=0;i<n;i++){
cin>>a[i][0]>>a[i][1];
}
int sum=0;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
sum+=(a[i][0]-a[j][0])+(a[i][1]-a[j][1]);
}
}
cout<<sum;
}
然后就超时了……┭┮﹏┭┮
第三题,这题目亿言难尽。(废话好多)。
不就是找最小数呗,然后设为0呗,其他减去最小数呗(以此往复)。就这么简单。
上代码!!!
#include <bits/stdc++.h>
long long ans = -1000000000;
long long arr[100010];
int main()
{
long long n;
scanf("%lld", &n);
for(long long i = 1; i <= n; i++)
{
scanf("%lld", &arr[i]);
}
std::sort(arr + 1, arr + n + 1);//用sort真香!!!
for(long long i = 1; i < n; i++)
{
ans = std::max(ans, arr[i+1]-arr[i]);
}
printf("%lld", ans);
return 0;
}
第四题 我真怀疑小H的数学是体育老师教的。而且“小H对你不太放心,所以他会给出多次询问。”我真的好想口吐芬芳。凸(艹皿艹 )!!!
思路就是按照题目所述类似高精度加法。
提供一下高精度加法代码。
#include<bits/stdc++.h>
using namespace std;
int a[200]={0};
int b[200]={0};
int c[200]={0};
int k=0;
int print(int n){
if(c[n]!=0){
cout<<c[n];
}
for(int i=n-1;i>=0;i--){
cout<<c[i];
}
}
int main(){
string s,s1;
cin>>s>>s1;
for(int i=s.size()-1;i>=0;i--,k++){
a[k]=s[i]-'0';
}
k=0;
for(int i=s1.size()-1;i>=0;i--,k++){
b[k]=s1[i]-'0';
}
k=0;
if(s1.size()==s.size()){
for(int i=0;i<s.size();i++){
c[k]=a[i]+b[i];
k++;
}
for(int i=0;i<k;i++){
if(c[i]>=10){
c[i+1]++;
c[i]-=10;
}
}
print(k);
}
else if(s1.size()<s.size()){
k=0;
for(int i=0;i<s.size();i++){
c[k]=a[i]+b[i];
k++;
}
for(int i=0;i<k;i++){
if(c[i]>=10){
c[i+1]++;
c[i]-=10;
}
}
print(k);
}
else{
k=0;
for(int i=0;i<s1.size();i++){
c[k]=a[i]+b[i];
k++;
}
for(int i=0;i<k;i++){
if(c[i]>=10){
c[i+1]++;
c[i]-=10;
}
}
print(k);
}
}
改一下把进位去掉:
#include<bits/stdc++.h>
using namespace std;
int a[200]={0};
int b[200]={0};
int c[200]={0};
int k=0;
int print(int n){
if(c[n]!=0){
cout<<c[n];
}
for(int i=n-1;i>=0;i--){
cout<<c[i];
}
}
int main(){
string s,s1;
cin>>s>>s1;
for(int i=s.size()-1;i>=0;i--,k++){
a[k]=s[i]-'0';
}
k=0;
for(int i=s1.size()-1;i>=0;i--,k++){
b[k]=s1[i]-'0';
}
k=0;
if(s1.size()==s.size()){
for(int i=0;i<s.size();i++){
c[k]=a[i]+b[i];
k++;
}
for(int i=0;i<k;i++){
if(c[i]>=10){
c[i+1]++;
c[i]-=10;
}
}
print(k);
}
else if(s1.size()<s.size()){
k=0;
for(int i=0;i<s.size();i++){
c[k]=a[i]+b[i];
k++;
}
print(k);
}
else{
k=0;
for(int i=0;i<s1.size();i++){
c[k]=a[i]+b[i];
k++;
}
for(int i=0;i<k;i++){
if(c[i]>=10){
c[i+1]++;
c[i]-=10;
}
}
print(k);
}
}
然后包装成函数。在调用,判断就好。然后……就没有然后了(超时了!!!)