题目2: 如果一个数字满足以下条件,就称它是奇异数 1、这个数字至少有两位 2、这个数字的最低两位是相同的 计算区间[L,R]内的所有奇异数。
参考答案:
#include <iostream>
using namespace std ;
long long func(long long v)
{
long long result = 0 ;
long long a, b;
result += (v / 100 ) * 10 ;
a = (v / 10 ) % 10 ;
b = v % 10 ;
if (b >= a)
{
result += a;
}
else
{
result += a - 1 ;
}
return result;
}
int main()
{
long long L, R;
while (cin >> L >> R) {
long long result = func(R) - func(L);
long long a = (L / 10 ) % 10 ;
long long b = L % 10 ;
if (a == b)
result++;
cout << result << endl;
}
return 0 ;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
题目三: 牛牛养了n只奶牛,妞妞想给奶牛编号,这样就可以轻而易举的分辨他们了。每个奶牛对于数字都有自己的喜好,第i只奶牛想要一个1和x[i]之间的整数,包含端点。计算总共有多少种符合要求的编号方法。 输入两行,第一行一个整数n,第二行n个整数x[i].
参考答案:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std ;
long long func(vector <int > v)
{
long long result = v[0 ];
long long temp = v[0 ];
for (int i = 1 ; i < v.size(); i++)
{
temp--;
temp += v[i] - v[i - 1 ];
result = result * temp;
result = result % 1000000007 ;
}
return result;
}
int main()
{
int n;
cin >> n;
vector <int > v(n);
for (int i = 0 ; i < n; i++)
{
cin >> v[i];
}
sort(v.begin(), v.end());
cout << func(v) << endl;
return 0 ;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
还做过一个京东的,比较简单,不另写了。附下面。 如果一个数的数字能够分成两组,并且他们的和相等,这个数就称为神奇数。计算给定区间[L,R]总共有多少个神奇数。 输入一行,第一行两个数,l和r。
#include <iostream>
#include <vector>
using namespace std ;
bool func(vector <int > v, int total)
{
vector <bool > state(total + 1 , 0 );
state[0 ] = true ;
for (int i = 0 ; i < v.size(); i++)
{
for (int j = total; j >= v[i]; j--)
{
if (state[j - v[i]])
{
state[j] = true ;
}
}
if (state[total / 2 ])
{
return true ;
}
}
return false ;
}
int main()
{
int l, r;
int result = 0 ;
cin >> l >> r;
for (int i = l; i <= r; i++)
{
vector <int > v;
int temp = i;
int total = 0 ;
while (temp)
{
int n = temp % 10 ;
total += n;
temp = temp / 10 ;
if (n > 0 )
{
v.push_back(n);
}
}
if ((total & 1 ) == 0 )
{
if (func(v, total))
{
result++;
}
}
}
cout << result << endl;
return 0 ;
}