目录
上面是参考了chatGPT的,第一次代码写失败了,以下是总结
正确代码
测试点:
代码:
#include <iostream>
using namespace std;
int main()
{
string N;
cin >> N;
int a[10][2] = {0};
for (int i = 0; i < 10; i++) {
a[i][1] = i;
}
int rec_ten_num = 1;
for (int i = 0; i < N.length(); i++) {
int num = N[i] - '0';
a[num][0]++;
}
for (int i = 0; i < 10; i++) {
if (a[i][0] != 0)
cout << a[i][1] << ":" << a[i][0] << endl;
}
return 0;
}
上面是参考了chatGPT的,第一次代码写失败了,以下是总结
先上代码:
#include<iostream>
using namespace std;
int main()
{
int N;
cin>>N;
int a[10][2];
for(int i=0;i<10;i++){
a[i][1]=i;
}
int rec_ten_num;
for(int i=0,rec_ten_num=1;N%rec_ten_num>0;i++){
a[N%rec_ten_num][2]++;
rec_ten_num*=10;
}
for(int i=0;i<10;i++){
if(a[i][2]!=0)
cout<<a[i]<<":"<<a[i][2]<<endl;
}
return 0;
}
1.首先是低级失误
定义了a[10][2],却用了a[i][2] 。用chat的话说是 “在统计数字出现的次数时,你应该使用数组 a
的第一个元素 a[i][0]
,而不是第二个元素 a[i][1]
。”
2.其次是考虑不周
题中说“个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。”,1000位远远超过int所能存储的最大值,应该用数组来存储。
当时想用数组来存储的,但是考虑的比较多,比如什么时间复杂度、开辟空间大小,现在看这些完全是过滤过多,并且对length()函数不熟悉,想不起来。
3.不错的地方
思路很清晰,从输入到输出,逻辑清晰,除了低级失误这两块没有问题,同时通过对输入输出的实现或者叫实现过程中,补充定义所需要的数据,确实无法一开始就想得很全,所以在实现过程中及时添加变量,我觉得这是不错的地方。
4. 解释
int num = N[i] - '0';
在 ASCII 码中,字符 '0' 对应的整数是 48,而字符 '1' 对应的整数是 49,以此类推,字符 '9' 对应的整数是 57。因此,我们可以通过将字符减去字符 '0' 来得到对应的整数。
例如,如果字符串 N
中的某个字符是 '3'
,那么我们可以通过 N[i] - '0'
得到整数 3。这是因为字符 '3'
对应的整数是 51,字符 '0'
对应的整数是 48,所以字符 '3'
减去字符 '0'
的结果是 3。
在这个程序中,我们可以使用 N[i] - '0'
将字符串 N
中的每个字符转换为对应的整数,并将其存储在变量 num
中。然后,我们可以使用 num
来统计每个数字出现的次数。
5.解释
N
是一个 string
对象,是 C++ 标准库中的一个类。string
类中包含了一些成员函数,如 length()
,用于获取字符串的长度。这些成员函数可以通过对象名和 .
运算符来访问。
在 C++ 中,通过点运算符(.
)来访问类的成员函数或成员变量,这是一种常用的语法。在访问 string
类的成员函数时,也可以使用点运算符来访问。例如 N.length()
就是调用了 string
类的 length()
成员函数,返回字符串 N
的长度。
在这个程序中,N
是一个字符串类型的变量,用来存储输入的整数。调用 N.length()
函数可以得到字符串 N
的长度。在 for
循环中,i
的取值从 0 到 N.length() - 1
,所以可以用 N[i]
来访问字符串 N
的第 i+1
个字符,也就是个位上的数字。
出现警告了,原因以及如何处理
代码过测试点啦,但有些警告a.cpp: In function ‘int main()’:
a.cpp:13:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (int i = 0; i < N.length(); i++) {
~~^~~~~~~~~~~~
a.cpp:12:9: warning: unused variable ‘rec_ten_num’ [-Wunused-variable] int rec_ten_num = 1;
^~~~~~~~~~~
1.N
是一个 string
类型,N.length()
的返回值是 size_t
类型,应该使用 size_t
或者 unsigned int
类型的变量来接收,而不是 int
类型。因为 int
类型可能无法表示 size_t
的最大值。
2.rec_ten_num
变量未被使用,应该删除。
以下是修改的代码:
#include <iostream>
using namespace std;
int main()
{
string N;
cin >> N;
int a[10][2] = {0};
for (int i = 0; i < 10; i++) {
a[i][1] = i;
}
for (size_t i = 0; i < N.length(); i++) {
int num = N[i] - '0';
a[num][0]++;
}
for (int i = 0; i < 10; i++) {
if (a[i][0] != 0)
cout << a[i][1] << ":" << a[i][0] << endl;
}
return 0;
}