100000575 - 《算法笔记》3.1小节——入门模拟->简单模拟

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;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值