codeup简单模拟

问题 A: 剩下的树

时间限制: 1 Sec   内存限制: 32 MB
提交: 742   解决: 368
[ 提交][ 状态][ 讨论版][命题人: 外部导入]

题目描述

有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,...,L共L+1个位置上有L+1棵树。
    现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。
    可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。

输入

两个整数L(1<=L<=10000)和M(1<=M<=100)。
    接下来有M组整数,每组有一对数字。

输出

 可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的个数。

样例输入

4 2
1 2
0 2
11 2
1 5
4 7
0 0

样例输出

2
5

#include <cstdio>
#include <cstring>
int main()
{
	int l,m,c,b;
	while(scanf("%d%d",&l,&m),l&&m)
  {
	int a[l+1];
	memset(a,0,sizeof(a));
	while(m--)
	{
		scanf("%d%d",&c,&b);
		for(int i=c;i<=b;i++)
		{
			a[i]=1;
		}
	}
	int j=0;
	for(int i=0;i<l+1;i++)
	{
		if(a[i]==0)
		{
			j++;
		}
	}
	printf("%d\n",j);
  }
	return 0;
} 

注意多次输入 j需每次都赋值否则累计

第一次没考虑输入0 0结束

用数组做的...

开始把区间的一个端点赋成了a,,,和数组同名了....

问题 B: A+B

时间限制: 1 Sec   内存限制: 32 MB
提交: 480   解决: 316
[ 提交][ 状态][ 讨论版][命题人: 外部导入]

题目描述

给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。

输入

输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。

输出

请计算A+B的结果,并以正常形式输出,每组数据占一行。

样例输入

-234,567,890 123,456,789
1,234 2,345,678

样例输出

-111111101
2346912

这题真的无能啊....我真的不会写.....借鉴了大佬的....TAT

虽然想到sscanf但还是没做TAT

#include<cstdio>
#include<cstring>
void change(char a[],char b[])
{
	int j=0;
	for(int i=0;i<strlen(a);i++)
	{
		if(a[i]!=',')
		  b[j++]=a[i];
	}
}
int main()
{
	char a[20],b[20];
	while(scanf("%s%s",a,b)!=EOF)
	{
		char c[20]={},d[20]={};
		change(a,c);
		change(b,d);
		long int num1,num2;
		sscanf(c,"%ld",&num1);
		sscanf(d,"%ld",&num2);
		printf("%ld\n",num1+num2);
   }
	return 0;
}

感觉好蠢啊....效仿大佬的代码....最后三个%ld还打成了lf lf %ld 我是不是傻....

问题 C: 特殊乘法

时间限制: 1 Sec   内存限制: 32 MB
提交: 370   解决: 286
[ 提交][ 状态][ 讨论版][命题人: 外部导入]

题目描述

写个算法,对2个小于1000000000的输入,求结果。特殊乘法举例:123 * 45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5

输入

 两个小于1000000000的数

输出

 输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。

样例输入

24 65
42 66666
3 67

样例输出

66
180
39

#include <cstdio>
#include <cstring>
int main()
{
	long int a,b;
	while(scanf("%ld%ld",&a,&b)!=EOF)
	{
		char s1[20], s2[20];
		sprintf(s1,"%ld",a);
		sprintf(s2,"%ld",b);
		long int sum=0; 
		for(int i=0;i<strlen(s1);i++)
	        for(int j=0;j<strlen(s2);j++)
	        {
	        	sum+=(s1[i]-'0')*(s2[j]-'0');
	        }
	    printf("%ld\n",sum);
	}
	return 0;
}

可以直接定义char数组

为了练习一下sscanf

想了半天-'0'....

问题 D: 比较奇偶数个数

时间限制: 1 Sec   内存限制: 32 MB
提交: 370   解决: 267
[ 提交][ 状态][ 讨论版][命题人: 外部导入]

题目描述

第一行输入一个数,为n,第二行输入n个数,这n个数中,如果偶数比奇数多,输出NO,否则输出YES。

输入


输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000)。


输出


如果偶数比奇数多,输出NO,否则输出YES。


样例输入

1
67 
7
0 69 24 78 58 62 64 

样例输出

YES
NO

#include <cstdio>
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		int o=0,e=0,a;
		while(n--)
		{
			scanf("%d",&a);
			if(a%2==0)
			{
				e++;
			}
			else
			o++;
		}
		if(o<e)
		printf("NO\n");
		if(o>e)
		printf("YES\n");
	}
	
	
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/coding18/article/details/80727354