C++中的循环题

1. 乘方计算

给出一个整数 a 和一个正整数n,求乘方 a n a^n an
输入:
一行,包含两个整数 an 。-1000000 <= a <= 1000000, 1 <= n <= 10000。
输出:
一个整数,即乘方结果。题目保证最终结果的绝对值不超过1000000 。
样例输入

2 3

样例输出

8

题解:

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
	int a,n;
	cin >> a >>n;
	int result = a;
	for(int i=0;i<n-1;++i)
		result *=a;
	cout << result;
	return 0;
}

2. 输入若干个整数求最大值

输入若干个整数(可正可负,不超过 int 的表示范围),输出最大值。
样例输入

-100 -20 20 -2

样例输出

20

题解:

#include <iostream>
#include <cstdio>
using namespace std;
int main(){ 
	int n,max;
	bool first = true; //输入的是否是第一个数
	while(cin >> n){
		if(first){
			max=n;
			first=false;
		}
		else{
			if(n>max)
				max=n;
		}
	}
	cout << max <<endl;
	return 0;
}

3. 输入至少2个整数,求最大值和第二大值

样例输入

1 5 6 3 4 6

样例输出

6 6
样例输入
1 5 6 3 4

样例输出

6 5

题解:

#include <iostream>
#include <cstdio>
using namespace std;
int main(){ 
	int n,max1,max2;
	int num=0;//输入的是第几个数
	while(cin >> n){
		++num;
		if(num == 1)
			max1=n;
		else if(num == 2){
				if(n > max1){
					max2 = max1;
					max1 = n;
				}
				else 
					max2 = n;
		}
		else{	// num > 2
			if(n >= max1){
				max2 = max1;
				max1 = n;
			}
			else if(n > max2)
					max2 = n;
		}
	}
	cout << max1 << " " << max2 << endl;
	return 0;
}

4. 斐波那契数列

斐波那契数列是指这样的数列:数列的第一个和第二个数都为 1,接下来的每个数都等于前面 2 个数之和。给出一个正整数 k,要求斐波那契数列中第 k 个数是多少。
样例输入

19

样例输出

4181

题解:

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
	int a1=1,a2=1;int k;
	cin >> k;
	if(k == 1 || k == 2)
		cout << 1 << endl;
	else{
		int sum;
		for(int i=0;i<k-2;++i){
			sum = a1+a2;
			a1 = a2;
			a2 = sum;
		}
		cout << a2 << endl;
	}
	return 0;
}
递归解法
int Fib(int n){
	if(n==1 || n==2)
		return 1;
	else 
		return Fib(n-1)+Fib(n-2);
}

5. 求阶乘的和

给定正整数 n,求不大于 n 的正整数的阶乘的和(即求1!+2!+3!+…+n!)
输入:
输入有一行,包含一个正整数 n(1<n<12)。
输出:
输出有一行:阶乘的和。
样例输入

5

样例输出

153

题解(改进前):

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
	int n;
	cin >> n;
	int sum = 0;
	for(int i=1;i<=n;++i){
		int factorial=1;	//存放i阶乘 
		for(int j=1;j<=i;++j)
			factorial *=j;	//此操作数1+2+3+...+n次 
		sum += factorial;
	}
	cout << sum; 
	return 0;
}

题解(改进后):

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
	int n;
	cin >> n;
	int sum = 0;
	int factorial = 1;
	for(int i=1;i<=n;++i){
		factorial *=i;
		sum += factorial;
	}
	cout << sum; 
	return 0;
}

6. 输入正整数n(n>=2),求不大于n的全部素数(质数)

题解(改进前):

#include <iostream>
#include <cstdio>
using namespace std;
int main(){ 
	int n;
	cin >> n;
	for(int i=2;i<=n;++i){	//每次判断i是否是质数 
		int k;
		for(k=2;k<i;++k){
			if(i%k == 0)
				break;
		}
		if(k == i)	//k==i 说明没有执行过break
			cout << i << endl; 
	} 
	return 0;
}//此解法做了没必要的尝试, k 大于 i的平方根后就不必再试

题解(改进后):

#include <iostream>
#include <cstdio>
using namespace std;
int main(){ 
	int n;
	cin >> n;
	cout << 2 << endl;
	for(int i=3;i<=n;i+=2){	//每次判断i是否是质数 
		int k;
		for(k=3;k<i;k+=2){
			if(i%k == 0)
				break;
			if(k*k > i)
				break;
		}
		if(k*k > i)
			cout << i << endl; 
	}
	return 0;
}
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值