小米OJ题解[1-10]

1.A+B

描述

和所有的 OJ 平台一样,第一题作为热身题,也是送分题:给出两个非负数 a 和 b,输出a+b的结果。

输入

多组输入。
包含两个非负数 $a$和 $b$,以空格分隔; $a$和 $b$保证小于$2^{32}$.

输出

你的输出是对一行数据处理的结果,也即$a+b$的结果。

输出样例

233 666
123 0

输出样例

899
123

代码

code one(C++)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int MAXN = 1e5+10;
const int INF = 0x3f3f3f3f;

int main()
{
    ll a, b;
    while(~scanf("%lld %lld",&a,&b))
    {
        printf("%lld\n",a+b);
    }
    return 0;
}

code two(Java)

先占个位,Java自学模式马上开始。

2.找出单独出现的数字

描述

给出N个数字。其中仅有一个数字出现过一次,其他数字均出现过两次,找出这个出现且只出现过一次的数字。要求时间和空间复杂度最小。

输入

输入多个数字,每个数字以空格分开。数字数量 N < 20,输入数字的最大值小于 256.

输出

输出内容为只出现过唯一一次的数字

输入样例

10 10 11 12 12 11 16

输出样例

16

思路

利用数组下标计数,为了节省时间,需要确定这组数的范围,即确定最小值和最大值,缩小查找区间。

代码

code one(C++)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int MAXN = 1e5+10;
const int INF = 0x3f3f3f3f;

int a[300];
int main()
{
    int num = 0, x;
    int minx = 300;
    int maxx = -1;
    while(~scanf("%d",&x))
    {
        a[x]++;
        if(x<minx) minx = x;
        if(x>maxx) maxx = x;
    }
    for(int i=minx; i<=maxx; i++)
    {
        if(a[i]==1)
        {
            printf("%d\n",i);
            break;
        }   
    }
    return 0;
}

code two(Java)

先占个位,Java自学模式马上开始。

3.大数相减

描述

两个长度超出常规整形变量上限的大数相减,请避免使用各语言内置大数处理库,如 Java.math.BigInteger 等。

输入

有 N 行测试数据,每一行有两个代表整数的字符串 a 和 b,长度超过百位。规定 a>=b,a, b > 0。
测试结果可以用 linux 小工具 bc进行测试是否正确。

输出

返回表示结果整数的字符串。

输入样例

1231231237812739878951331231231237812739878951331231231237812739878951331231231237812739878951331231231237812739878951331231231237812739870-89513312312312378127398789513312312312378127398789513312312312378127398789513
1231231237812739878951331231231237812739878951331231231237812739878951331230000000000000000000000001-331231231237812739878951331231231
Last modification:April 8th, 2019 at 09:33 am
有钱的捧个钱场,没带钱的捧个人场。

One comment

  1. 李新琦

    继续努力

Leave a Comment