3.1 简单模拟

3.1 简单模拟,第1张

【Codeup 3.1A】剩下的树 http://codeup.hustoj.com/problem.php?cid=100000575&pid=0 分析

题目本身不涉及算法,只是简单的模拟,开个数组就OK了,但是通过这题还是有些知识点收获的

1.scanf的返回值

返回正确按指定格式输入变量的个数

格式错误->返回EOF

格式不完全正确->返回成功输入的数据的个数

while(scanf()!=EOF)等价于while(~scanf())

2.memset()方法(有用

memset可以方便的清空一个结构体变量或数组。


(1)如果是结构体:
struct user
{

int id;
char userame[16];
};

对于变量
struct user userA;

一般情况下,清空userA的方法:

userA.id=0
userA.userame[0]='/0';

用memset就非常方便:
memset(&userA,0,sizeof(struct user));

(2)如果是数组:
int school[10];

memset(school,0,sizeof(school));

代码
#include
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
【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()函数用法:

sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。


格式转换形式请参考scanf()。


定义太抽象了,我们还是先来看一下常见的用法吧:
(1)sscanf("zhoue3456 ", "%4s", str); //取指定长度的字符串       
          printf("str=%s\n", str);   //str="zhou";
(2)sscanf("zhou456 hedf", "%[^ ]", str); //取到指定字符为止的字符串,取遇到空格为止字符串    
          printf("str=%s\n", str);  //str=zhou456;
(3)sscanf("654321abcdedfABCDEF", "%[1-9a-z]", str); //取仅包含指定字符集的字符串
          printf("str=%s\n", str);  //str=654321abcded,只取数字和小写字符
(4)sscanf("BCDEF123456abcdedf", "%[^a-z]", str); //取到指定字符集为止的字符串       
           printf("str=%s\n", str);  //  str=BCDEF123456, 取遇到大写字母为止的字符串
(5)int a,b,c;
          sscanf("2015.04.05", "%d.%d.%d", &a,&b,&c); //取需要的字符串   
          printf("a=%d,b=%d,c=%d",a,b,c);  //  a=2015,b=4,c=5

大佬代码:

#include 
#include 
void dispose(char a[])
{
	char temp[15]={0};
	int pos=0;
	for(int i=0;i

 对了还有,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):遇到\0结束)

代码如下:

#include 
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

【Codeup3.1F 】 分析

题目很简单,但是希望注意以下问题

对于整形变量,编译器不同,宽度是不相同,分别如下:

16位编译器:

int: 2个字节(-2^15~2^15)
long: 4个字节
long long: 8个字节
unsigned long: 4个字节

32位编译器:

int: 2个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节

64位编译器:

int: 4个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/567264.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)