C++
(看到问题先试着做做看,再参考别人,望有收获)
8-3倒序输出(ReverseOrder)
程序说明:这个程序是输入4个无符号整数,然后倒序显示输出结果如输入1234,则输出4321。
实现方法1:
// number1/1000 这个是千位数
// (number1/100)%10 这个是百位数
// (number1/10)%10 这个是十位数
// number1%10 这个是个位数
实现方法2:
如果不是输出一个整体的数,而是出现效果,可以使用这个数的求余(%10)得到最后一个数,这个数/10去掉最后一个数,如此循环和输出就可以得到效果,可以通过do while或者for实现。
进阶:如果输入一个未知长短的数字,求倒序输出。
(要注意数字类型长短的问题)
实现方法:先求出这个数的个数。
然后循环个数的次数倒序输出结果。
作用:可以作用于一下对称图案输出
#include <iostream>
#include <math.h>
using namespace std;
int main() {
int number1; //输入的数字
int number2; //返回的数字
cout<<"输入一个4位数,让它倒序输出:"<<endl;
cin>>number1;
//以下是number1位置上数字的表达方法
//number1%10 这个是个位数
//(number1/10)%10 这个是十位数
//(number1/100)%10 这个是百位数
//number1/1000 这个是千位数
//也可以用%10得到最右边的数字,然后在/10去掉一位数字。
number2 = (number1%10)*1000+(number1/10)%10*100+(number1/100)%10*10+number1/1000;
cout<<number2<<endl;
//实现打印倒序输出(do{}while();)
int number3; //输入的值
cout<<"输入一个4位数,让它倒序输出:"<<endl;
cin>>number3;
do{
cout<<number3%10; //求出最右边的数字
number3 = number3/10; //却掉最右边的数字
}while(number3>0);
//实现打印倒序输出(for())
cout<<" "<<endl;
cout<<"以下是通过for循环实现方法"<<endl;
int number4;
cout<<"输入一个4位数,让它倒序输出:"<<endl;
cin>>number4;
for(int i=0;i<=3;i++)
{
cout<<number4%10;
number4 = number4/10;
}
cout<<" "<<endl;
//以下是实现未知数倒序打印输出和整体输出的实现方法
long number5; //输入的值
long temp; //储存number5求出数字位数
long number6=0; //用来储存输出的数
int numberCount =0; //字符长度
cout<<"请输入随意长度数字:"<<endl;
cin>>number5;
temp =number5;
while(temp!=0) //求出这个数的长度
{
temp =temp/10;
numberCount++;
}
cout<<"这个数是"<<numberCount<<"位。"<<endl;
cout<<"这个数的倒序输出是"<<endl;
for(int i=1;i<=numberCount;i++)
{
cout<<number5%10;
number6+=(number5%10)*pow(10,numberCount-i);
number5 =number5/10;
}
cout<<" "<<endl;
cout<<"这个数的倒序输出是"<<number6<<endl;
return 0;
}
8-4最小值(MinNumber)
程序说明:输入要输入数字的数目,分别输入值,得到最小值。
实现方法:确定要输入多少个,创建数组,遍历输出数组,输出最小值
进阶1:如果输入个数是单数,就输出大小在中间的值,如果输入个数是双数,就输出中间的两个值。
实现方法:先判断个数是单数还是双数,单数就进行遍历找出中间的值,双数就遍历找出中的两个的值,进行多个遍历进行数组的排列,再调出中间的数。
进阶2:输入未知数量的数字,进行排列,输出分别满足条件的值和该值为排序之前的序号(未实现)。
#include <iostream>
using namespace std;
int main() {
int numberCountOne; //输入数字的个数
cout<<"请输入您要多少个数字"<<endl;
cin>>numberCountOne;
cout<<"请开始输入:"<<endl;
int numberOne[numberCountOne];//数组来储存
int min; //储存最小数
for(int i=0;i<numberCountOne;i++)
{
cout<<"第"<<i+1<<"个数是:";
cin>>numberOne[i];
}
cout<<" "<<endl;
cout<<"您输入的数是:";
for(int i =0;i<numberCountOne;i++)
{
cout<<numberOne[i]<<" ";
min = numberOne[0];
if(numberOne[i]<numberOne[0])
{
min = numberOne[i];
}
}
cout<<"这些数中最小的数是:"<<min<<endl;
/*
进阶:寻找中间的值,如果输入个数是单数,就输出大小在中间的
值,如果输入个数是双数,就输出中的两个值。
*/
int numberCountTwo;
cout<<"请输入您需要输入的数字个数:";
cin>>numberCountTwo;
int number[numberCountTwo];
if(numberCountTwo%2) //如果是单数
{
cout<<"您输入的是单数:"<<numberCountTwo<<endl;
for(int i=0;i<numberCountTwo;i++)
{
cout<<"请输入第"<<i+1<<"的值:";
cin>>number[i];
}
cout<<"现在进行数组排列。"<<endl;
int temp; //用来交换数字
for(int i=0;i<numberCountTwo-1;i++)
{
for(int j=0;j<numberCountTwo-1-i;j++)
{
if(number[j]>number[j+1])
{
temp =number[j+1];
number[j+1]=number[j];
number[j] =temp;
}
}
}
for(int i=0;i<numberCountTwo;i++)
{
cout<<number[i]<<" ";
}
cout<<" "<<endl;
cout<<"现在帮你找出大小排序在中间的值。"<<endl;
cout<<"中间的值是"<<number[numberCountTwo/2]<<endl;
}
else
{
cout<<"您输入的是双数:"<<numberCountTwo<<endl;
for(int i=0;i<numberCountTwo;i++)
{
cout<<"请输入第"<<i+1<<"的值:";
cin>>number[i];
}
cout<<"现在进行数组排列。"<<endl;
int temp; //用来交换数字
for(int i=0;i<numberCountTwo-1;i++)
{
for(int j=0;j<numberCountTwo-1-i;j++)
{
if(number[j]>number[j+1])
{
temp =number[j+1];
number[j+1]=number[j];
number[j] =temp;
}
}
}
for(int i=0;i<numberCountTwo;i++)
{
cout<<number[i]<<" ";
}
cout<<" "<<endl;
cout<<"现在帮你找出大小排序在中间的两个值。"<<endl;
cout<<"中间的两个数分别是"<<number[numberCountTwo/2-1]
<<"和"<<number[numberCountTwo/2]<<endl;
}
//实现输入一些数字,位数不知
return 0;
}
之后再进行优化和方法的调用
8-5有序分数(OrderlyScoresAdd)
程序说明:有一个分数序列2/1、3/2、5/3、8/5…求其前n项之和。
实现方法:找出规律,使用循环进行求出每个位置上的数,再求和。
进阶:多个规律结合起来,中间数的变化,比如top=top+down,down=top-down。
其他规律:分母分别为2,4,6,8,10,12,分子分别为2,3,4,5,6,7,求它们的和
#include <iostream>
using namespace std;
int main() {
double downNumber =1; //分母
double topNumber =2; //分子
int numberCount; //输入要求的个数
double Number =0; //储存由分子和分母组成的数字
double sumNumber =0; //数的和
cout<<"这是有规律的分数,数序列2/1、3/2、5/3、8/5"<<endl;
cout<<"开头是2/1,请输入要计算第几位的和:";
cin>>numberCount;
for(int i=1;i<=numberCount;i++)
{
Number =topNumber/downNumber;
sumNumber+=Number;
topNumber =topNumber+downNumber;
downNumber = topNumber -downNumber;
}
cout<<"输出的结果为:"<<sumNumber<<endl;
/*
以下为其他的规律
分母分别为2,4,6,8,10,12
分子分别为2,3,4,5,6,7
求第n个数的和
*/
cout<<"这是有规律的分数,数序列2/2、4/3、6/4、10/5"<<endl;
cout<<"开头是2/2,请输入要计算第几位的和:";
float topNumberOne =2; //分子
float downNumberOne =2; //分母
float numberOne=0; //组成的数
float sumNumber1 =0; //和
int n1; //个数
cout<<"开头是2/2,请输入要计算多少个数字:";
cin>>n1;
for(int i=1;i<=n1;i++)
{
numberOne =topNumberOne/downNumberOne;
sumNumber1+=numberOne;
topNumberOne = 2*(i+1);
downNumberOne = 2+i;
}
cout<<"输出的结果为:"<<sumNumber1<<endl;
return 0;
}
8-6多重数字的和(MultipleNumbers)
程序说明:求a+aa+aaa+aaaa+ ……+aaaa…aaa(n个)的和
实现方法:可以通过求出每个位置上的a的值,对应的位数就是该位置的数字位数,比如第3个数字的位数为3。
(总结,pow()函数要使用#“math.h”,是浮点运算,要使用浮点类型,不然会有误差)
Printf()函数要使用 “stdio.h”
进阶:求阶乘的值
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int main() {
int n=0; //多少个这样的数
int a=0; //选择什么样的数字
long sum=0;//数字群的和
cout<<"请输入您需要什么样的数字:";
cin>>a;
cout<<"请输入您需要多少个这样的数字相加:";
cin>>n;
double number[n];
double temp=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
temp+=a*pow(10,j);
}
number[i] =temp;
cout<<number[i]<<endl;
temp =0;
}
for(int i =0;i<n;i++)
{
sum+=number[i];
}
cout<<sum<<endl;
//以下是求阶乘的和
int number1;
int sum1=1; //结果储存
cout<<"请问你要求数字多少的阶乘:";
cin>>number1;
cout<<"这个数的阶乘结果是:"<<endl;
for(int i =1;i<=number1;i++)
{
sum1*=i;
}
cout<<sum1<<endl;
return 0;
}
8-7猜数字(Guess the number)
程序说明:猜幻数游戏。由系统随机给出一个数字(即幻数),游戏者去猜,如果猜对,则打印成功提示;否则,打印出错提示,并提示游戏者悬着下一步动作,最多可以猜5次
实现方法:先随机一个数字,开始猜,猜大了就提示大了,猜小了就提示小了,猜对了就提示对了,最多可以猜5次,猜5次就提示,不能再猜了。
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define random(x)(rand()%x)
using namespace std;
int main() {
int number; //用来装随机的数字
int GuessNumber;//用来装玩家猜的数字
int n; //要猜的次数
int guessCount = 0; //记录猜的次数
srand((int)time(0));
number =random(100);
cout<<"请输入要猜的次数:";
cin>>n;
cout<<"数字已经生成,请开始竞猜:";
for(int i =1;i<=n;i++)
{
cin>>GuessNumber;
if(GuessNumber>number)
{
cout<<"大了,需要猜小点。"<<endl;
}
else if(GuessNumber<number)
{
cout<<"小了,需要猜大点。"<<endl;
}
else
{
cout<<"恭喜你!猜对了。"<<endl;
break;
}
if(i<n)
{
cout<<"你已经猜了"<<guessCount<<"次了,请把握机会!"<<endl;
}
else
{
cout<<"你已经猜了"<<n<<"次了,很可惜!"<<endl;
}
guessCount++;
cout<<"请继续:";
}
cout<<"这个数字是:"<<number<<endl;
cout<<"一共猜了:"<<guessCount<<"次。"<<endl;
return 0;
}
8-8制作生日卡(BirthdayCard)
程序说明:能够编写生日卡片的程序,使其能够输入和显示日期。
#include <iostream>
using namespace std;
struct Birthday //成员类型
{
char name[8];//名字 类型判断为string char[]
int month; //月份 int month
int day; //天数 int day
};
int main() {
Birthday birthday;
cout<<"请输入名字:";
cin>>birthday.name;
cout<<"请输入生日的月份:";
cin>>birthday.month;
cout<<"请输入生日所在月份的天数:";
cin>>birthday.day;
cout<<" "<<endl;
cout<<"成员:"<<birthday.name<<","<<birthday.month<<"月"<<birthday.day<<"日,生日!"<<endl;
return 0;
}