A剩下的树
这题定义一个数组全部为1,若砍树则元素变为0,最后计算数据元素和即可
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
const int maxL=10001;
int a[maxL] = { 0 };//记录树
int main()
{
int L,M;
int i,j;
int min, max;
int num;
while (1)
{
scanf("%d %d", &L, &M);
if (L == 0 && M == 0)
return 0;
for (i = 0; i <= L; i++)
{
a[i] = 1;
}
for (i = 0; i < M; i++)
{
scanf("%d %d", &min, &max);
for (j = min; j <= max; j++)
a[j] = 0;
}
num = 0;
for (i = 0; i <= L; i++)
{
num += a[i];
}
printf("%d\n", num);
}
return 0;
}
B A+B
首先将字符数组里的逗号去掉,使用神奇的sscanf函数将字符转换为int型,相加输出,注意最后可以用memset函数清空内存,不加memset也行
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
void dispose(char a[])
{
int i;
char temp[15] = { 0 };
int pos = 0;
for (i = 0; i < strlen(a); i++)
{
if (a[i] != ',')
temp[pos++] = a[i];
}
for (i = 0; i <= strlen(a); i++)
{
a[i] = temp[i];
}
}
int main()
{
char a[15], b[15];
int num1, num2;
while (scanf("%s %s", a, b)!=EOF)
{
dispose(a);
dispose(b);
//printf("%s %s\n", a, b);
sscanf(a,"%d",&num1);
sscanf(b,"%d",&num2);
//printf("%d %d\n",num1,num2);
printf("%d\n",num1+num2);
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
}
//scanf("%d %d", &L, &M);
//printf("%d\n", num);
return 0;
}
问题 C: 特殊乘法
这题注意ascll码和数字之间的转换,要减去48
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
int main()
{
char a[15], b[15];
int i, j;
int sum;
while (scanf("%s %s", a, b)!=EOF)
{
sum = 0;
for(i=0;i<strlen(a);i++)
for (j = 0; j < strlen(b); j++)
{
sum += (a[i]-48) * (b[j]-48);
}
printf("%d\n", sum);
}
//scanf("%d %d", &L, &M);
//printf("%d %d\n", L, M);
//printf("%d\n", num);
return 0;
}
问题 D: 比较奇偶数个数
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
int main()
{
int temp;
int numj, numo;
int n;
int i;
while (scanf("%d", &n) != EOF)
{
numj = numo = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &temp);
if (temp % 2 != 0)
numj++;
else
numo++;
}
if (numj > numo)
printf("YES\n");
else
printf("NO\n");
}
//scanf("%d %d", &L, &M);
//printf("%d %d\n", L, M);
//printf("%d\n", num);
return 0;
}
问题 E: Shortest Distance (20)
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
const int maxn = 100010;
int a[maxn] = { 0 };
int main()
{
int N;
int M;
int i,j;
int num1, num2;
int sum1, sum2;
int temp;
scanf("%d", &N);
for (i = 0; i < N; i++)
{
scanf("%d",&a[i]);
}
scanf("%d", &M);
for (i = 1; i <= M; i++)
{
scanf("%d %d", &num1, &num2);
sum1 = sum2 = 0;
if (num1 > num2)
{
temp = num1;
num1 = num2;
num2 = temp;
}
//下面计算sum1
for (j = num1 - 1; j <(num2-1); j++)
{
sum1 += a[j];
}
//下面计算sum2
for (j = 0; j < num1 - 1; j++)
{
sum2 += a[j];
}
for (j = num2-1; j < N; j++)
{
sum2 += a[j];
}
printf("%d\n", sum1 < sum2?sum1:sum2);
}
//scanf("%d %d", &L, &M);
//printf("%d %d\n", L, M);
//printf("%d\n", num);
return 0;
}
问题 F: A+B和C (15)
这题注意要用long long类型,因为Int类型只到2的31次方,longlong类型到2的63次方
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
int main()
{
long long A, B, C;
int T;
int i;
long long c_b;
scanf("%d", &T);
for (i = 1; i <= T; i++)
{
scanf("%lld %lld %lld", &A, &B,&C);
c_b = C - B;
if (A > c_b)
printf("Case #%d: true\n",i);
else
printf("Case #%d: false\n", i);
}
//scanf("%d %d", &L, &M);
//printf("%d %d\n", L, M);
//printf("%d\n", num);
return 0;
}
问题 G: 数字分类 (20)
注意输出格式啊
还有一些小细节
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
const int maxn = 1010;
int a[maxn] = { 0 };
int main()
{
int N;
int i;
int A1,A2,A3,A5;
float A4;
int B[6];
int temp ;
int num;
while (scanf("%d", &N) != EOF)
{
for (i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}
A1 = A2 = A3 = A4 = A5 = 0;
B[1] = B[2] = B[3] = B[4] = B[5] = 0;
temp = 1;
for (i = 0; i < N; i++)
{
num = a[i] % 5;
if(num==0)
{
if (a[i] % 2==0)
{
B[1] = 1;
A1 += a[i];
}
}
else if(num == 1)
{
B[2] = 1;
A2 += temp * a[i];
temp = temp * (-1);
}
else if (num == 2)
{
B[3] = 1;
A3++;
}
else if (num == 3)
{
B[4]++;
A4 += a[i];
}
else
{
B[5] = 1;
if (a[i] > A5)
A5 = a[i];
}
//printf("i=%d-a[i]=%d-A1:%d-A2:%d-A3:%d-A4:%.1f-A5:%d\n", i,a[i], A1, A2, A3, A4, A5 );
}
for (i = 1; i <= 5; i++)
{
if (B[i] == 0)
printf("N ");
else if (i == 1)
printf("%d ", A1);
else if (i == 2)
printf("%d ",A2);
else if (i == 3)
printf("%d ", A3);
else if (i == 4)
printf("%.1f ", A4/B[4]);
else
printf("%d \n",A5);
}
}
//scanf("%d", &N);
//scanf("%d %d", &L, &M);
//printf("%d %d\n", L, M);
//printf("%d\n", num);
return 0;
}
问题 H: 部分A+B (15)
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
const int maxn = 1010;
int a[maxn] = { 0 };
int main()
{
int a, da, b, db;
int temp;
int num1, num2;
int lena, lenb;
int i, j;
while (scanf("%d %d %d %d", &a, &da,&b,&db)!=EOF)
{
num1 = 0;
temp = a;
for (i = 0; temp != 0; i++)
{
if (temp % 10 == da)
num1 = num1 * 10 + da;
temp = temp / 10;
}
num2 = 0;
temp = b;
for (i = 0; temp != 0; i++)
{
if (temp % 10 == db)
num2 = num2 * 10 + db;
temp = temp / 10;
}
printf("%d\n",num1+num2);
}
//scanf("%d", &N);
//scanf("%d %d", &L, &M);
//printf("%d %d\n", L, M);
//printf("%d\n", num);
return 0;
}
问题 I: 锤子剪刀布 (20)
这题一直没过,怀疑人生中,最后发现是角标写错了,复制粘贴害人不浅😅
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
const int maxn = 1010;
int a[maxn] = { 0 };
int main()
{
int N;
char temp1, temp2;
int i;
int jia[6] = { 0 };
int yi[6] = {0};
int max1, max2;
scanf("%d", &N);
for (i = 0; i < N; i++)
{
getchar();
scanf("%c %c", &temp1, &temp2);
//temp1 = getchar();
//temp2 = getchar();
//printf("!%c-%c", temp1, temp2);
if (temp1 == temp2)
{
jia[1]++;
yi[1]++;
}
if (((temp1 == 'C') && (temp2 == 'J')))
{
jia[0]++;
yi[2]++;
jia[4]++;
}
if (((temp1 == 'J') && (temp2 == 'B')))
{
jia[0]++;
yi[2]++;
jia[5]++;
}
if (((temp1 == 'B') && (temp2 == 'C')))
{
jia[0]++;
yi[2]++;
jia[3]++;
}
if (((temp2 == 'C') && (temp1 == 'J')))
{
jia[2]++;
yi[0]++;
yi[4]++;
}
if (((temp2 == 'J') && (temp1 == 'B')))
{
jia[2]++;
yi[0]++;
yi[5]++;
}
if (((temp2 == 'B') && (temp1 == 'C')))
{
jia[2]++;
yi[0]++;
yi[3]++;
}
// printf("%d\n", i);
//printf("%d %d %d\n", jia[0], jia[1], jia[2]);
//printf("%d %d %d\n", yi[0], yi[1], yi[2]);
}
// printf("B-%d C-%d J-%d\n", jia[3], jia[4], jia[5]);
// printf("B-%d C-%d J-%d\n", yi[3], yi[4], yi[5]);
max1 = max2 = 3;
for (i = 3; i <= 5; i++)
{
if (jia[i] > jia[max1])
max1 = i ;
if (yi[i] > yi[max2])
max2 = i;
}
printf("%d %d %d\n", jia[0], jia[1], jia[2]);
printf("%d %d %d\n", yi[0], yi[1], yi[2]);
if (max1 == 3)
printf("B ");
else if (max1 == 4)
printf("C ");
else printf("J ");
if (max2 == 3)
printf("B");
else if (max2 == 4)
printf("C");
else printf("J");
//scanf("%d", &N);
//scanf("%d %d", &L, &M);
//printf("%d %d\n", L, M);
//printf("%d\n", num);
return 0;
}