【Codeup 3.1A】剩下的树
http://codeup.hustoj.com/problem.php?cid=100000575&pid=0
分析
题目本身不涉及算法,只是简单的模拟,开个数组就OK了,但是通过这题还是有些知识点收获的
1.scanf的返回值
2.memset()方法(有用)
memset可以方便的清空一个结构体变量或数组。
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=10010;
int tree[maxn]={0};
int main()
{
int l,m;
scanf("%d%d",&l,&m);//scanf的返回值了解
while(!(l==0&&m==0)){
memset(tree,0,l);
for(int i=0;i<m;i++){
int b,e;
scanf("%d%d",&b,&e);
for(int j=b;j<=e;j++)
tree[j]=1;
}
int cnt=0;
for(int j=0;j<=l;j++){
if(tree[j]==0)
cnt++;
}
printf("%d\n",cnt);
scanf("%d%d",&l,&m);
}
return 0;
}
【Code3.1B A+B】
http://codeup.hustoj.com/problem.php?cid=100000575&pid=1
分析
字符串转整数问题,我的代码是逐位扫描乘10相加
for(int i=0;i<=sizeA;i++){
if(a[i]>='0'&&a[i]<='9')
numA=numA*10+(a[i]-'0');
}
if(a[0]=='-') numA=-numA;
大佬用到了sscanf()函数,这确实比我的方法妙不少
sscanf()函数用法:
大佬代码:
#include <cstdio>
#include <cstring>
void dispose(char a[])
{
char temp[15]={0};
int pos=0;
for(int i=0;i<strlen(a);i++)
if(a[i]!=',')
temp[pos++]=a[i];
for(int i=0;i<strlen(a);i++)
a[i]=temp[i];
}
int main()
{
char A[15],B[15];
while(scanf("%s %s",A,B)!=EOF)
{
int a,b;
dispose(A);
dispose(B);
sscanf(A,"%d",&a);
sscanf(B,"%d",&b);
printf("%d\n",a+b);
memset(A,0,sizeof(A));
memset(B,0,sizeof(B));
}
return 0;
}
对了还有,scanf("%s")适用char型数组,别整string或者char*
【Codeup3.1C 特殊乘法】
http://codeup.hustoj.com/problem.php?cid=100000575&pid=2
分析
乍一看,是整数转字符串型的,但是其实可以再简单一点点的
输入的时候就以char[ ]类型输入,然后直接for(int i=0;i<strlen(a);i++)遍历a[ ]即可
(补充:strlen(a):遇到\0结束)
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{
char a[10],b[10];
while(~scanf("%s%s",a,b)){
int ans=0;
int size1=strlen(a),size2=strlen(b);
for(int i=0;i<size1;i++){
for(int j=0;j<size2;j++){
ans+=(a[i]-'0')*(b[j]-'0');
}
}
printf("%d\n",ans);
}
return 0;
}
【Codeup3.1F 】
分析
题目很简单,但是希望注意以下问题