目录
斐波那契数列
1.规定a0=1,a1=1,用户输入一个下表n值,可以显示相应的项结果。
题目分析:
要求:①用户输入下标值n
②显示相应下标的结果
过程实现:先定义好前两项,(注意:是从第0项开始的)从第二项开始递归。(for语句)
递归时注意顺序!且for语句实现通常要定义一个辅助变量i。
#include<iostream>
using namespace std;
int main()
{
int a0=1, a1=1, a2, n, i;
while (cin >> n)
{
if (n == 0) a2=1;
if (n == 1) a2 = 1;
for (i = 2; i <= n; i++)
{
a2 = a0 + a1; //这个一定要先计算出初始的结果,才开始递归!
a0 = a1; //这里两个递归千万不可以调换顺序!
a1 = a2;
}
cout << a2 << endl;
}
return 0;
}
输出2-100以内的素数,并且每五个换行。
要求:2-100(for循环语句)变量m
素数(for循环判断)输出(cout),需要创建辅助变量i作除数
每五个换行(if语句),需要另外一个变量n计算素数数量
#include<iostream>
using namespace std;
int main()
{
int n,k=0;
for (n = 2; n <= 100; n++)
{
for (int i = 2; i <= n; i++)
{
if (i == n)
{
cout << n << '\t';
k++; //k为素数个数计数器
if (k % 5 == 0) cout << endl; //每五个换行
break;
}
if (n %i == 0) //不是素数,但需要考虑2也是素数,故这个if放在后面
{
break;
}
}
}
return 0;
}
对2-135的整数素数因式分解
int n,i;
while (cin >> n)
{
if (n >= 2 && n<= 135)
{
for (i = 2; i <= n; )
{
if (n % i == 0)
{
n = n / i;
cout << ' ' << i;
}
else i++;
}
cout << endl;
}
}
PS:不用另外对于“素数”作限制,能被一个数整除就代表这个数就是素数
打印空心正方形
用*
int n;//方阵的边长
while (cin >> n)
{
int i, j,k,a;
for (i = 1; i <= n; i++)//第一行边长
{
cout << "*";
}
//空心行
cout << '\n';
for (k = 1; k <= n - 2; k++)//有n-2个空心行,每行效果相同
{
cout << "*";
for (j = 1; j <= n - 2; j++)
{
cout << " ";
}
cout <<"*"<< endl;
}
//最后一行
for (a = 1; a <= n; a++)
{
cout << "*";
}
cout << endl;
打印空心正方形变式
void print(int, char);
int main()
{
int n;
char sign;
while (cin >> n>>sign)
{
if (n <=0)
{
cout << "ERROR" << endl;
}
for (int l = 1; l <= n; l++) //递增打印,学会了哦!!!!!!
{
print(l, sign);
}
}
return 0;
}
void print(int n, char sign)
{
if (n == 1) cout << sign << endl;
if (n > 1)
{
for (int j = 1; j <= n; j++)
{
cout << sign;
}
cout << endl;
for (int j = 1; j <= n - 2; j++)
{
cout << sign;
for (int k = 1; k <= n - 2; k++)
{
cout << " ";
}
cout << sign; cout << endl;
}
for (int j = 1; j <= n; j++)
{
cout << sign;
}
cout << endl;
}
}
计算某种式子
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int m, n, p, i, j, s1 = 0, s2 = 0;
while (cin >> m >> n >> p)
{
float r1 = (1 + m) * m * 0.5;
int r2, r3; //类型不要乱设定
for (i = 1; i <= n; i++)
{
r2 = i * i * i;
s1 = s1 + r2;
}
for (j = 1; j <= p; j++)
{
r3 = j * j * j * j * j;
s2 = s2 + r3;
}
float result = (r1 + s1) / s2;
cout << fixed << setprecision(4) << result << endl;
i = 1; j = 1; r1 = 0; r2 = 0; r3 = 0; s1 = 0; s2 = 0; //必须得变量重置
}
return 0;
}
勒让德多项式
#include<iostream>
#include<iomanip> //限制小数头文件
using namespace std;
float ss(float x, int n)
{
if (n == 0) return 1;
else if (n == 1) return x;
else if (n > 1)
{
float result;
result = ((2 * n - 1) * ss(x, n - 1) - (n - 1) * ss(x, n - 2)) / n;
return result;
}
}
int main()
{
int n;
float x;
while (cin >> x >> n)
{
float result = ss(x, n);
cout << fixed << setprecision(2) << result << endl; //限制输出两位小数
}
return 0;
}
猜数游戏
#include<iostream>
using namespace std;
int guess(int k =0);
int main()
{
int answer, t = 1;
cout << "请你想好一个1~1000之内的整数,别告诉我,让我来猜猜!\n";
cout << "猜中了,请输入0;若猜的数小了,请输入-1;若猜的数大了,请输入1\n";
cout << "开始猜了……\n";
cout << "是 " << guess() << " 吗?\t";
while (1)
{
cin >> answer; //注意是有多个输入的,计算机每猜一个数输入一次
if (answer == 0)
{
cout << "我猜中啦!只猜了 " << t << " 次,很强吧!\n";
break;
}
cout << "是 " << guess(answer) << " 吗?\t";
t++;
}
}
int guess(int k)
{//定义static变量,使它在main函数里也生效
static int min = 1;
static int max = 1000;
static int g = 500;
switch (k)
{
case 0: break;
case 1: max = g - 1; break;
case -1: min = g + 1; break;
default: cout << "你输入错了,请再输入。\n"; return g;
}
if (max < min)
{
cout << "你耍赖…不跟你玩了!\n";
exit(0); //退出整个程序
}
g = (min + max) / 2;
return g;
}
判断回文数
#include <iostream>
using namespace std;
int main()
{
long n;
while (cin >> n)
{
int a[100];
int i, j;
for (i = 0;1; i++)
{
a[i] = n % 10;
n = n / 10; //把每个数字存进数组
if (n < 1)
{
break; // 条件永真时要有循环终止条件
}
}//此时i相当于数组的下标
for (j = 0; j < i / 2; j++)
{
if (a[j] !=a[i - j]) break; //两边比较,首先把错的给排除了,好吗
}
if (i / 2 == j) cout << "YES" << endl; //执行到最后依旧满足两边相等
else cout << "NO" << endl;
}
return 0;
}
蛇形矩阵
#include<iostream>
using namespace std;
void snake(int N);
int main()
{
int N;
while (cin >> N)
{
snake(N);
}
return 0;
}
//输出蛇形矩阵
void snake(int N)
{
int n = 1; //n的counter
static int snake[32][32]; //32×32的矩阵恰好可以容纳N的最大值
int x, y; //行数,列数
int L; //对角线的第数
//为矩阵赋值
for (L = 1; n; L++) //以对角线为分组对元素赋值
{
//使虚拟光标从最左下方元素开始移动
x = L - 1; //借助L也完成了对行数的递增
y = 0;
while (x >= 0)
{
snake[x][y] = n;
n++;
if (n > N)
{
n = 0; //当n为0时外循环不执行
break;
}
//每次循环一次令光标向右上方移动一个单位
x--;
y++;
}
}
//输出矩阵
for (x = 0;x<L-1 ; x++) //当输出到最后一行时主动结束循环,避免输出换行
{
for (y = 0; ; y++)
{
if (snake[x][y] > 0 && snake[x][y] <= N)
{
if (y >= 1)
cout << " " << snake[x][y];
if (y == 0) //第一列元素之前不输出空格
cout << snake[x][y];
}
else break; //不输出没有被赋值的元素
}
cout<<endl;
}
}
计算向量点积+输出最大最小值的差
int main()
{
int n; //向量的维数
while (cin >> n)
{
int num1, num2; int sum = 0; int r1=0; int r2=0, r3=0;
int max1 = -1000, max2 = -1000, min1 = 1000, min2 = 1000; //将这些变量写进while中,会更省事,不用变量重置了!
int a[1000];
int b[1000];
for (int i = 0; i < n; i++)
{
cin >> num1;
if (num1 > max1)max1 = num1;
if (num1 < min1)min1 = num1;
a[i] = num1;
}
for (int i = 0; i < n; i++)
{
cin >> num2;
if (num2 > max2) max2 = num2;
if (num2 < min2) min2 = num2;
b[i] = num2;
}
for (int i = 0; i < n; i++)
{
sum = sum + a[i] * b[i];
}
cout << sum << endl;
r2 = max1 - min1;
r3 = max2 - min2;
cout << r2 << "&" << r3 << endl;
}
return 0;
}