1001 熟悉一下Online Judge的环境
#include <bits/stdc++.h> using namespace std; int main() { int a,b; cin>>a>>b; cout<<a+b; return 0; }
1002 - 编程求解1+2+3+...+n
基础for循环写法
定义一个s一开始等于0,然后在for-i遍历1~n的过程中,不停的保存i的累加和
#include<bits/stdc++.h> using namespace std; int main(){ int n,s=0; cin >> n; for(int i=1;i<=n;i++){ s=s+i; } cout << s; return 0; }
递归写法
假设OP(num) = 1+2+3+...+num-1+num
那么OP(num-1) = 1+2+3+...+num-1
因此OP(num) = OP(num-1)+num
类推OP(num-1)=OP(num-2)+(num-1)
.....
直到OP(0) = 0 结束
故递归入口是 num,出口是num=0
#include<bits/stdc++.h> using namespace std; int OP(int num){ if(num==0){ // 出口 OP(0) = 0; return 0; } return OP(num-1)+num; //没到出口的话 OP(num)=OP(num+1)+num } int main(){ int n; cin >> n; cout << OP(n); return 0; }
1003 - 编程求1+3+5+...+n
基础for循环
我们发现题目要我们求的是1~n之间所有奇数的累加和
所以我们可以直接定义一个s保存累加和即可
for(int i=1;i<=n;i++){ if(i%2==1){ // 奇数除二的余数是1,故条件成立i此时是奇数 s+=i; // "s+=i"等价"s=s+i" } }
改进for循环
我们写出来的代码要讲究效率,所以自己观察一会儿下面这串代码吧!有没有发现聪明了"亿点点"
for(int i=1;i<=n;i+=2){ s+=i; }
递归写法
假设OP(num) = 1+3+5+...+num
那么OP(num) = OP(num-2)+num
因此出口就是 OP(1) = 1
int OP(int num){ if(num==1){ return 1; } return OP(num-2)+num }
1004 - 编程求1*2*3*...*n
基础for循环
定义一个变量s=1,已知答案最大为n=10的情况,此时s=3628800,没有超出int范围
其他逻辑同1002一样
#include<bits/stdc++.h> using namespace std; int main(){ int n,s=1; cin >> n; for(int i=2;i<=n;i++){ s*=i; } cout << s; return 0; }
递归写法
假设OP(num) = 1*2*3*...*num
那么OP(num) = OP(num-1)*num
因此出口是OP(1) = 1
int OP(int num){ if(num==1){ return 1; } return OP(num-1)*num; }
1005 - 已知一个圆的半径,求解该圆的面积和周长
fixed setprecision()
保留小数位方法1
#include<bits/stdc++.h> using namespace std; int main(){ int r; cin >> r; double p = 3.1415926; cout << fixed << setprecision(2) << p*r*r << endl; cout << fixed << setprecision(2) << 2*p*r << endl; return 0; }
printf
保留小数位方法2
#include<bits/stdc++.h> using namespace std; int main(){ int a; cin >> a; double p = 3.1415926; printf("%.2lf\n%.2lf",p*a*a,2*p*a); return 0; }
1006 - 打印星号三角形
嵌套for循环
这题是三倍数量的星号三角形,我们只需要把每行打印单个三角形的代码重复三次即可
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin >> n; for(int i=1;i<=n;i++){ // 打印n行 for(int j=1;j<=3;j++){ // 重复三次 for(int k=n-i;k>=1;k--){ // 打印前面的空格 cout << " "; } for(int j=i*2-1;j>=1;j--){ // 打印星星 cout << "*"; } for(int k=n-i;k>=1;k--){ // 打印后面的空格 cout << " "; } } cout << endl; } return 0; }
1007 - 统计大写英文字母的个数
增强for循环遍历string
整行读取string,遍历到点退出循环
#include<bits/stdc++.h> using namespace std; int main(){ int cnt = 0; string s; getline(cin,s); for(char x:s){ if(x=='.'){ break; } if(x>='A'&&x<='Z'){ cnt++; } } cout << cnt; return 0; }
while循环读取字符
#include<bits/stdc++.h>
using namespace std;
int main(){
int cnt = 0;
char ch;
while(cin>>ch && ch!='.'){
if(ch>='A'&&ch<='Z'){
cnt++;
}
}
cout << cnt;
return 0;
}
1008 - 字符图形9-数字正三角
嵌套for循环
第i行前面空格的数量等于n-i,数字数量为i*2-1
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin >> n; for(int i=1;i<=n;i++){ for(int j=1;j<=n-i;j++){ cout << " "; } for(int j=1;j<=i*2-1;j++){ cout << i; } cout << endl; } return 0; }
1009 - 数组逆序
基础for循环
#include<bits/stdc++.h> using namespace std; int main(){ int n,a[110]; cin >> n; for(int i=1;i<=n;i++){ cin >> a[i]; } for(int i=n;i>=1;i--){ cout << a[i] << " "; } return 0; }
递归输入输出
#include<bits/stdc++.h> using namespace std; void OP(int n){ int num; cin >> num; if(n>1) OP(n-1); cout << num << " "; } int main(){ int n; cin >> n; OP(n); return 0; }
1010 - 数组元素的排序
选择排序
#include<bits/stdc++.h> using namespace std; int main(){ int n,a[20]; cin >> n; for(int i=1;i<=n;i++){ cin >> a[i]; } for(int i=1;i<n;i++){ for(int j=i+1;j<=n;j++){ if(a[i]>a[j]){ swap(a[i],a[j]); // 交换a[i]与a[j]的值 } } } for(int i=1;i<=n;i++){ cout << a[i] << " "; } return 0; }
冒泡排序
#include<bits/stdc++.h> using namespace std; int main(){ int n,a[20]; cin >> n; for(int i=1;i<=n;i++){ cin >> a[i]; } for(int i=1;i<n;i++){ for(int j=1;j<=n-i;j++){ if(a[j]>a[j+1]){ swap(a[j],a[j+1]); // 交换a[i]与a[j]的值 } } } for(int i=1;i<=n;i++){ cout << a[i] << " "; } return 0; }
标记法
#include<bits/stdc++.h> using namespace std; int main(){ int n,a[20]; cin >> n; for(int i=1;i<=n;i++){ cin >> a[i]; } for(int i=1;i<=n;i++){ int f=1; for(int j=2;j<=n;j++){ if(a[j]<a[f]){ f = j; } } cout << a[f] << " "; a[f] = INT_MAX; } return 0; }