珠宝店
- 1.题目
- 2.分析
- 3.代码
- scanf %s 和 gets()混和使用
- 纯用scanf %s 也可
- 使用二维数组(数组开大,所以内存会占用的比较大)
- 巧妙输出(也能AC,但是个人感觉好像不太符合题目要求)
- 4.总结
- 5.更新日志
1.题目
题目链接
题号:NC14347
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
小Z向女神告白成功,成功脱单,为了庆祝,小Z决定送女神一个礼物。
在珠宝店,小Z终于发现一种既便宜又大气的手链。
手链的价格是看手链上的宝石决定的,每一种宝石的价值不一样。
具体规则如下:
宝石A的价值是1、宝石B的价值是2、宝石C的价值是3·····宝石Z的价值是26。
为了防止被销售员虚报价格,小Z决定请你帮忙计算一下手链的价值。
输入描述:
本题有T组数据。
对于每组数据只有一行。
1≤T≤20 1≤手链长度≤100000
输出描述:
输出结果,并换行.
示例1
输入
2
ABCD
LOVELOVE
输出
10
108
2.分析
将字符串读入,依次分析即可。
3.代码
scanf %s 和 gets()混和使用
注意用getchar()消去’\n’的干扰!!
千万不要用scanf(“%s\n”,str)这种写法!!!
#include <stdio.h>
int main()
{int i,T;int Value[25]={0}; //珠宝价值初始化为0scanf("%d",&T);getchar(); //注意吞掉\n 防止影响下一步输入字符串for(i=0;i<T;i++) //T组测试{char Jewel[100005];gets(Jewel);int j=0;while(Jewel[j]!='\0'){Value[i]+=(Jewel[j]-'A'+1);j++;}}for(i=0;i<T;i++)printf("%d\n",Value[i]);return 0;
}
纯用scanf %s 也可
使用二维数组(数组开大,所以内存会占用的比较大)
#include <stdio.h>
int main()
{char Jewel[21][100001]={0}; //初始化 int Sum[21]={0};int T;int i;scanf("%d",&T); //组数for(i=0;i<T;i++){scanf("%s",Jewel[i]);int j=0;while(Jewel[i][j]!='\0'){Sum[i]+=(Jewel[i][j]-'A'+1);j++;}}for(i=0;i<T;i++){if(i==T-1)printf("%d",Sum[i]);elseprintf("%d\n",Sum[i]);}return 0;
}
巧妙输出(也能AC,但是个人感觉好像不太符合题目要求)
#include <stdio.h>
int main()
{char Jewel[21][100001]={0}; //初始化 int Sum[21]={0};int T;int i;scanf("%d",&T); //组数while(T--){scanf("%s",Jewel[i]);int j=0;while(Jewel[i][j]!='\0'){Sum[i]+=(Jewel[i][j]-'A'+1);j++;}printf("%d\n",Sum[i]);i++;}return 0;
}
4.总结
函数的使用和返回要弄清楚,错误的使用会带来未知的结果
5.更新日志
2022.4.2 整理
欢迎交流、讨论、指正~
不理解之处欢迎评论留言~