你的脑容量(字符串问题,小技巧)

你的脑容量(2018.10.5)

题目传送门
Description
intint占用4个字节,boolbool占用1个字节,long longlonglong占用88个字节,doubledouble占用8个字节,charchar占用1个字节,floatfloat占用4个字节。
这是哪个世界线的咒语吗?
计算机中各种存储容量的单位都是用字节(ByteByte简为BB)来表示,此外还有KBKB(千字节)、MBMB(兆字节)、GBGB(千兆字节)和TBTB(太字节),他们的关系是
1KB=1024Bytes=210 Byte
1MB=1024KB=2
20Byte
1GB1024MB=230Byte
1TB1024GB=2
40Bytes…
请你写一个程序,求nn个这六种类型的变量,求出这些变量理论上需要使用多少KBKB(千字节)的内存,答案向上取整。

Input
第一行一个整数T,代表有T组样例
对于每组样例第一行n标识输入有n行 (n<=100000)(n<=100000)
接下n行如上述所示
输入保证1:每一行只有一个类型名和变量名
存在:int a;而不存在:int a,b
2:输入的基本格式为:<变量类型> <变量名>
3:n的和不超过200000

Output
输出用了多少KBKB(千字节)内存(向上取整)

Sample Input 1
1
1
int a

Sample Output 1
1
这个题只要把题意弄懂了就非常容易想到思路,这六种类型的变量中,每种类型变量对应 的字节是一样的,所以,我们不必理会变量名是什么,只要对输入类型的变量的字节数累加就可以了。

#include<stdio.h>
#include<string.h>
int main()
{
    int T,n,ans;
    char b[100],a[10000];
    while(scanf("%d",&T)!=EOF)
    {
        while(T--)
        {
            ans=0;
            scanf("%d",&n);
          	getchar();
            while(n--)
            {
                scanf("%s%s",b,a);
                if(b[0]=='i'||b[0]=='f')ans+=4;
                else if (b[0]=='b'||b[0]=='c')ans+=1;
                else (b[0]=='l'||b[0]=='d');ans+=8;
            }
            printf("%d\n",(ans+1023)/1024);
        }
    }
    return 0;
}

刚开始由于忘了加吸收换行符的getchar()而WA,加上之后,又忽略了scanf()不能接受空格再次WA,多次WA之后才找到关键点,只能怪自己c语言语法掌握的还是不牢固。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值