E 悠唯的大数字比较
也可以使用 strcmp。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdbool.h>
#define MAX(a, b) (a > b) ? (a) : (b)
#define MIN(a, b) (a < b) ? (a) : (b)
char A[5003], B[5003];
int main()
{
int n;
scanf("%d", &n);
while (n-- > 0)
{
scanf("%s%s", A, B);
int x1 = strlen(A), x2 = strlen(B), result = 0;
if (x1 > x2)
result = 1;
else if (x1 < x2)
result = -1;
else
for (int i = x1; i > 0; i--)
{
if (A[x1 - i] > B[x2 - i]) // 'A' > '9'
{
result = 1;
break;
}
else if (A[x1 - i] < B[x2 - i])
{
result = -1;
break;
}
}
if (result == 0)
printf("EQUAL\n");
else if (result == 1)
printf("A\n");
else
printf("B\n");
}
}
F lx 解方程
函数在给定区间内是单调递减函数。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdbool.h>
#define MAX(a, b) (a > b) ? (a) : (b)
#define MIN(a, b) (a < b) ? (a) : (b)
const double pi = acos(-1);
double f(double x)
{
return (sin(sqrt(x)) + exp(-pow(x, 1.0 / 3.0))) / log(pi * x);
}
int main()
{
double y;
scanf("%lf", &y);
double start = 0.33, end = 10;
while (end - start > 0.00000001)
{
double mid = (start + end) / 2;
if (f(mid) > y)
{
start = mid;
}
else
{
end = mid;
}
}
printf("%.5lf", start);
}
G ArcheyChen的狼题
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdbool.h>
#define size 22
char arr[size];
int n, pos = size - 1;
bool plus(int pos)
{
if ((size - pos) > n)
return false;
arr[pos]++;
if (arr[pos] > ('A' + n - (size - pos)))
{
if (!plus(pos - 1))
return false;
arr[pos] = arr[pos - 1] + 1;
}
return true;
}
void print()
{
for (int i = 0; i < size; i++)
{
if (arr[i] >= 'A')
{
putchar(arr[i]);
putchar(' ');
}
}
putchar('\n');
}
int main()
{
for (int i = 0; i < size; i++)
{
shit[i] = 'A' - 1;
}
scanf("%d", &n);
while(plus(size - 1))
{
print();
}
}
H 生日蛋糕
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdbool.h>
long long gcd(long long a, long long b)
{
return b == 0 ? a : gcd(b, a % b);
}
int main()
{
int n;
scanf("%d", &n);
long long xs[21], ys[21];
for (long long i = 0; i < n; i++)
{
scanf("%lld", &xs[i]);
}
long long ans = 0;
for (int i = 1; i < (1 << n); i++)
{
long long gcdval = -1;
int cnt = 0;
for (int j = 0; j < n; j++)
{
if (i & (1 << j))
{
cnt++;
if (gcdval == -1)
gcdval = xs[j];
else
gcdval = gcd(gcdval, xs[j]);
}
}
if (cnt % 2 == 0)
ans -= gcdval;
else
ans += gcdval;
}
printf("%lld", ans);
}
I 摸鱼助教MoggⅠ
先合并两个数组,然后用二分查找。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdbool.h>
long long a[10002], b[10002], z[20004];
int main()
{
int n, m, k;
while (scanf("%d%d%d", &n, &m, &k) != EOF)
{
for (int i = 0; i < n; i++)
{
scanf("%lld", &a[i]);
}
for (int i = m - 1; i >= 0; i--)
{
scanf("%lld", &b[i]);
}
a[n] = b[m] = 0x812345678;
int total = m + n;
for (int posa = 0, posb = 0; posa + posb < total;)
{
if (a[posa] < b[posb])
{
z[posa + posb] = a[posa];
posa++;
}
else
{
z[posa + posb] = b[posb];
posb++;
}
}
for (int i = 0; i < k; i++)
{
long long c;
scanf("%lld", &c);
int ans = -1;
if (c >= z[0] && c <= z[total - 1])
{
int start = 0, end = total;
while(end - start > 1)
{
int mid = (start + end) / 2;
if (z[mid] <= c)
{
start = mid;
}
else
{
end = mid;
}
}
if (z[start] != c)
ans = -1;
else
ans = total - start;
}
printf("%d ", ans);
}
printf("\n");
}
}
本作品使用基于以下许可授权:Creative Commons Attribution-ShareAlike 4.0 International License.
大佬tql