文章目录
hdu1090简单输入输出
题意: 输出 a + b。
scanf代码
#include<stdio.h>
int main(){
int t, a, b;
scanf("%d", &t);
while(t--){
scanf("%d%d", &a, &b);
printf("%d\n", a + b);
}
return 0;
}
cin代码
#include<iostream>
using namespace std;
int t, a, b;
int main(){
cin >> t;
while(t--){
cin >> a >> b;
cout << a + b << endl;
}
return 0;
}
hdu2002格式输出
题意: 计算球的体积。
//部分题目用到的pi,自己定义一个精确度到小数点四五位以后的浮点数就够用了。也可以用更精确的办法计算pi的值,这里不具体展开。
printf代码
#include<stdio.h>
const double PI = 3.1415927;
int main(){
double r, v;
while(~scanf("%lf", &r)){
v = (4.0 * PI * r * r * r) / 3;
printf("%.3lf\n", v);
}
return 0;
}
cout代码
cin、cout本来写起来感觉很方便,但是控制输出格式的时候就不那么方便了,题目要求输出精确到小鼠点后三位,cout用到<< fixed << setprecision(3)
来控制输出格式,同时用到头文件#include<iomanip>
。可以做个了解,cout的格式输出还有很多,也不展开介绍,感兴趣的可以自行百度,或者参考一些C++语言的书本。
#include<iostream>
#include<iomanip>
using namespace std;
const double pi = 3.1415927;
double r, v;
int main(){
while(cin >> r){
v = (4 * pi * r * r * r) / 3;
cout << fixed << setprecision(3) << v << endl;
}
return 0;
}
poj3981字符串替换
题意: 把语句中的you
改成we
后输出。
题意很简单,代码也很简单,所以直接看代码自行理解,此处不加赘述。
getchar解决
#include<iostream>
using namespace std;
int main(){
char a, b, c;
while((a = getchar()) != EOF){
if(a == 'y')
if((b = getchar()) == 'o')
if((c = getchar()) == 'u')
cout << "we";
else
cout << "yo";
else
cout << "y" << b;
else
cout << a;
}
return 0;
}
gets解决
#include<iostream>
using namespace std;
char str[1005];
int main(){
while(gets(str) != NULL){
for(int i = 0; str[i] != '\0'; i++){
if(str[i] == 'y' && str[i + 1] == 'o' && str[i + 2] == 'u'){
cout << "we";
i += 2;
}else
cout << str[i];
}
cout << endl;
}
return 0;
}
string解决
string的方法看上去可能会更加高级,用到了string下的两个函数:
string.find()
如果能再字符串S中找到子串s,则返回子串s的第一个字符的位置,否则返回-1。string.replace()
替换函数,目的是把字符串S中某个子串s改成t
#include<iostream>
#include<string>
using namespace std;
int main(){
int pos;
string str;
while(getline(cin, str)){
while((pos = str.find("you")) != -1) //如果语句中含有 you
str.replace(pos, 3, "we"); //字符串替换 you -> we
cout << str << endl;
}
return 0;
}
hdu1062字符串翻转
题意: 将语句中的单词翻转后输出。
string解决
注意点:
- 输入t之后紧跟的一个回车
'\n'
会影响到后续语句的读入,所以需要用cin.get();
处理。 - 如果是字符串数组
char str[]
的整句读入,可以用gets(str)
,但这里是STL下的string,应该采用getline(cin, s);
的形式。 string.reverse()
将字符串翻转。用到头文件#include<algorithm>
- 题目要求的是翻转单词,而不是整个语句,所以我们需要遍历整个语句,找到每个单词,然后进行反转操作。
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int t;
string s;
int main(){
cin >> t;
cin.get();
while(t--){
getline(cin, s);
int begin = 0; //begin分别记录某个单词首字母的位置
int len = s.length();
for(int i = 0; i <= len; i++){
if(i == len || s[i]==' '){ //遍历到空格'或者句末的时候标志着一个单词的结束
reverse(s.begin() + begin, s.begin() + i);
begin = i + 1; //翻转以后将单词的首字母位置后移到下一个单词
}
}
cout << s << endl;
}
return 0;
}
stack解决(作了解)
stack,称作栈(其实就是个坑),其特点是“先进后出”。例如乘坐电梯先进电梯的最后出来。一盒药最先放进盒子的药片位于最底层最后被拿出来。此处用来单词的翻转非常的应景:把某个单词的字符挨个入栈,然后输出(先进后出,出栈时已完成翻转)。可能理解起来有些晦涩,先做了解吧,早晚都会学到的。
注意点:
- stack用到头文件
#include<stack>
- 同上一题,输入n之后,需要用
getchar();
来处理回车'\n'
。
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
int n;
char ch;
int main(){
scanf("%d", &n);
getchar();
while(n--){
stack<char> s;
while(1){
ch = getchar();
if(ch==' ' || ch=='\n' || ch==EOF){ //空格、回车、文件结束都标志着一个单词的结束
while(!s.empty()){
printf("%c", s.top()); //输出“坑”最顶上的字符
s.pop(); //所谓的“出栈”,就是从“坑”的最顶上取出一个字符扔掉
}
if(ch=='\n' || ch==EOF) //回车或文件结束都标志着语句结束
break;
printf(" ");
}
else
s.push(ch); //所谓“入栈”,就是把单词的字符挨个扔到一个“坑”里
}
printf("\n");
}
return 0;
}