1016 部分A+B
#include <stdio.h>
int getP(int a, int da)
{
int res = 0;
while (a) {
if ((a % 10) == da)
res = res * 10 + da;
a /= 10;
}
return res;
}
int main()
{
int a, da, b, db;
scanf("%d%d%d%d", &a, &da, &b, &db);
da = getP(a, da);
db = getP(b, db);
printf("%d\n", da + db);
return 0;
}
1017 A除以B
簡單的特殊除法模擬
#include <stdio.h>
#include <string.h>
#define MAX 1005
int bigDiv(char A[], int B, char Q[])
{
int lenA = strlen(A);
int cnt = 0;
int d = 0;
for (int i = 0; i < lenA; i++) {
d = d * 10 + A[i] - '0';
if (d >= B) {
Q[cnt++] = d / B + '0';
d %= B;
} else if (cnt || lenA == 1)
Q[cnt++] = '0';
}
Q[cnt] = '\0';
return d;
}
int main()
{
char A[MAX], Q[MAX];
int B, R;
scanf("%s%d", A, &B);
R = bigDiv(A, B, Q);
printf("%s %d\n", Q, R);
return 0;
}
1018 錘子剪刀布
#include <stdio.h>
int a[200], b[200];
char getMAX(int a[])
{
char max = 'B';
if (a['B'] < a['C'])
max = 'C';
if (a[max] < a['J'])
max = 'J';
return max;
}
int main()
{
int n,hj = 0;
char aa, bb;
scanf("%d", &n);
while (n-->0) {
getchar();
scanf("%c %c", &aa, &bb);
if (aa == bb) {
hj++;
continue;
}
if (aa == 'J' && bb == 'B')
a['J']++;
if (aa == 'J' && bb == 'C')
b['C']++;
if (aa == 'C' && bb == 'B')
b['B']++;
if (bb == 'J' && aa == 'B')
b['J']++;
if (bb == 'J' && aa == 'C')
a['C']++;
if (bb == 'C' && aa == 'B')
a['B']++;
}
int sumA = a['B'] + a['C'] + a['J'];
int sumB = b['B'] + b['C'] + b['J'];
printf("%d %d %d\n%d %d %d\n", sumA, hj, sumB, sumB, hj, sumA);
printf("%c %c\n",getMAX(a), getMAX(b));
return 0;
}
1019 數字黑洞
注意,6174和0000也要做一次運算顯示出來!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int compInc(const void *a, const void *b)
{
return (*(int *)b) - (*(int *)a);
}
int compDec(const void *a, const void *b)
{
return (*(int *)a) - (*(int *)b);
}
int notIorD(int n, int sign)
{
int res = 0, a[4], cnt = 0;
memset(a, 0, sizeof(a));
while (n) {
a[cnt++] = n % 10;
n /= 10;
}
if (sign)
qsort(a, 4, sizeof(int), compInc);
else
qsort(a, 4, sizeof(int), compDec);
for (int i = 0; i < 4; i++)
res = res * 10 + a[i];
return res;
}
int main()
{
int n;
scanf("%d", &n);
do {
int tmp1 = notIorD(n, 1);
int tmp2 = notIorD(n, 0);
n = tmp1 -tmp2;
printf("%04d - %04d = %04d\n", tmp1, tmp2, n);
} while (n != 0 && n != 6174);
return 0;
}
1020 月餅
注意讀題審題,分清正數和正整數!!!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX (int)1e3+5
typedef struct{
double save;
double sale;
}MoCake;
int comp(const void *a, const void *b)
{
MoCake *aa = (MoCake *)a;
MoCake *bb = (MoCake *)b;
double aaa = aa->sale / aa->save;
double bbb = bb->sale / bb->save;
if(aaa > bbb)
return -1;
else
return 1;
}
int main()
{
MoCake m[MAX];
int n, d;
scanf("%d%d", &n, &d);
for (int i = 0; i < n; i++)
scanf("%lf", &m[i].save);
for (int i = 0; i < n; i++)
scanf("%lf", &m[i].sale);
qsort(m, n, sizeof(MoCake), comp);
double sum = 0;
for (int i = 0; i < n; i++) {
if (d <= m[i].save) {
sum += m[i].sale / m[i].save * d;
break;
} else {
d -= m[i].save;
sum += m[i].sale;
}
}
printf("%.2lf\n", sum);
return 0;
}