简要分析题目
- 题目链接(AcWing)
- 题目链接(洛谷)
真的是水题,基本会输入输出会 if else 的都会写,emm……都不知道讲啥了。
常规输入字符串
最常规做法,基本都会:
#include
using namespace std;
int ans;
char s[8];
int main() {
cin >> s;
for (int i = 0; i < 8; i++) {
if (s[i] == '1')ans++;
}
cout << ans;
return 0;
}
或者用 string 代替 char 数组:
#include
#include
using namespace std;
int ans;
char s[8];
int main() {
cin >> s;
for (int i = 0; i < 8; i++) {
if (s[i] == '1')ans++;
}
cout << ans;
return 0;
}
基础中的基础(连循环都没用的)
因为我们已知字符串长度为8,所以可以手打八个输入,不用循环(可是连循环都不会的人去比赛干嘛?!)
#include
using namespace std;
int ans;
char ch;
int main() {
cin >> ch;
if (ch == '1')ans++;
cin >> ch;
if (ch == '1')ans++;
cin >> ch;
if (ch == '1')ans++;
cin >> ch;
if (ch == '1')ans++;
cin >> ch;
if (ch == '1')ans++;
cin >> ch;
if (ch == '1')ans++;
cin >> ch;
if (ch == '1')ans++;
cin >> ch;
if (ch == '1')ans++;
cout << ans;
return 0;
}
下面开始(负)优化代码
边输入边判断省一点内存
#include
using namespace std;
int ans;
int main(){
for(int i=0;i<8;i++){
if(getchar()=='1')ans++;
}
printf("%d",ans);
return 0;
}
直接用 getchar 函数返回值进行判断,省去一个字符的内存,而且 getchar 比 cin 会快上一些。
bitset 存 01 串
bitset 中存储的也是01,可以用它来存01串:
#include
#include
using namespace std;
bitset<8>s;
int ans;
int main() {
cin >> s;
printf("%d", s.count());//count函数统计s中"1"的个数
return 0;
}
用^代替比较比较运算符
位运算是计算机最基础的运算了,应该比普通的比较快一些(吧):
#include
using namespace std;
int ans;
int main() {
for (int i = 0; i < 8; i++) {
if (!(getchar() ^ '1'))ans++;
}
printf("%d", ans);
return 0;
}
面向对象
-用这种方法首先你要有一个对象-
-或者立刻找一个对象-
或者你需要定义一个类(√)
#include
using namespace std;
class ONEZEROCHUAN {
char ch[8];
int geshu;
public:
ONEZEROCHUAN():geshu(0){
for (int i = 0; i < 8; i++) {
ch[i] = getchar();
}
for (int i = 0; i < 8; i++) {
if (ch[i] == '1')geshu++;
}
}
void print() {
printf("%d", geshu);
}
}ans;
int main() {
ans.print();
return 0;
}
代码逐渐抽象ing
面向对象2.0
-此时当我们已经有了对象-
当我们已经熟练掌握了面向对象编程,我们惊讶的发现,-有了对象以后我们已经什么都不需要了-,有了构造函数以后我们已经不需要主函数了:
#include
using namespace std;
class solve {
int ans;
public:
solve():ans(0) {
for (int i = 0; i < 8; i++) {
if (!(getchar() ^ '1'))ans++;
}
printf("%d", ans);
}
}a;
int main(){}
面向对象3.0
-当我们已经不满足于仅有一个对象,我们就准备去开后宫-
当我们已经不满足于平凡的构造函数,我们想到了析构函数:
#include
using namespace std;
class solve {
int ans;
public:
solve() :ans(0) {}
~solve() {
for (int i = 0; i < 8; i++) {
if (!(getchar() ^ '1'))ans++;
}
printf("%d", ans);
}
}a;
int main(){}
究极代码(仅Windows)
当我们足够强大,最快的时间和最小的内存已经无法让我们感到很勇,我们开始追求刺激(评测机瑟瑟发抖)。
#include
#include
using namespace std;
int ans;
int main(){
new int[64225280];
Sleep(990);
for(int i=0;i<8;i++){
if(getchar()=='1')ans++;
}
printf("%d",ans);
return 0;
}