东方博宜 1000-1010


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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三块不一样的石头

十分满意,一分打赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值