#include<iostream>
using namespace std;
int main()
{
int a,b,c,d,h,m;
cin>>a>>b>>c>>d;
h = c-a;
m = d-b;
if(m<0){ //分钟数为负数
h--; //小时数-1
m += 60; //借1当60,分钟数+60
}
cout<<h<<" "<<m;
return 0;
}
#include<iostream>usingnamespace std;int main(){int a,b,c,d,h,m;
cin>>a>>b>>c>>d;
h = c-a;
m = d-b;if(m<0){//分钟数为负数
h--;//小时数-1
m +=60;//借1当60,分钟数+60 }
cout<<h<<" "<<m;return0;}
三、小规模排序
1.两个整数升序排序
问题描述:输入两个整数a,b,按照从小到大的顺序输出这两个数。
思路一:如果a<b,那么依次输出a,b,否则依次输出b,a
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
intmain()
{
int a,b;
cin>>a>>b;
if(a<b) cout<<a<<" "<<b<<endl;
else cout<<b<<" "<<a<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
if(a<b) cout<<a<<" "<<b<<endl;
else cout<<b<<" "<<a<<endl;
return 0;
}
#include<cstdio>
int main()
{
int a,b,c;
char op;
scanf("%d%c%d",&a,&op,&b);
switch(op){
case '+':c=a+b;break;
case '-':c=a-b;break;
case '*':c=a*b;break;
case '/':c=a/b;break;
case '%':c=a%b;break;
}
printf("%d",c);
return 0;
}
#include<cstdio>
int main()
{
int a,b,c;
char op;
scanf("%d%c%d",&a,&op,&b);
printf("%d %c %d",a,op,b);
return 0;//额外添加上这一句
switch(op){
case '+':c=a+b;break;
case '-':c=a-b;break;
case '*':c=a*b;break;
case '/':c=a/b;break;
case '%':c=a%b;break;
}
printf("%d",c);
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int s = 0;
s += 1;
s += 2;
s += 3;
//...
s += 100;
cout<<s;
return 0;
}
#include<iostream>usingnamespace std;int main(){int s =0;
s +=1;
s +=2;
s +=3;//...
s +=100;
cout<<s;return0;}
这里的100条累加语句很显然应该借助循环结构实现,累加语句的形式都是 s += ?;,那么这样的语句应该作为重复执行100次的for循环的循环体(可以很容易总结出重复执行n次的for循环头部可以写出for(i=1;i<=n;i++)):
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
int i,s = 0;
for(i=1;i<=100;i++){
s += ?;
}
cout<<s;
int i,s = 0;
for(i=1;i<=100;i++){
s += ?;
}
cout<<s;
int i,s =0;for(i=1;i<=100;i++){
s +=?;}
cout<<s;
那么循环体中的s += ?;中?处应该填写什么内容呢?再来分析100次循环执行语句:第1次循环是 s += 1; 第2次循环是 s += 2;第3次循环是 s += 3;……第100次循环是 s += 100;,那么第i次循环应该是 s += i;。大家要注意这一个找规律并抽象归纳的过程,以后我们再探讨循环执行流程就应该说第i次循环执行什么操作,而不是停留在分析具体的第1次、第2次……循环执行什么操作。这样完整的程序代码如下:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
intmain()
{
int i,s = 0;
for(i=1;i<=100;i++){
s += i; //第i次循环:s累加上i
}
cout<<s;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int i,s = 0;
for(i=1;i<=100;i++){
s += i; //第i次循环:s累加上i
}
cout<<s;
return 0;
}
#include<iostream>usingnamespace std;int main(){int i,s =0;for(i=1;i<=100;i++){
s += i;//第i次循环:s累加上i}
cout<<s;return0;}
#include<iostream>
using namespace std;
int main()
{
int n;
//计算n!,n值即使不大,但n!可能很大,最好使用long long
long long t = 1;
cin>>n;
for(int i=1;i<=n;i++){
t *= i; //第i次循环:t累乘上i
}
cout<<t;
return 0;
}
#include<iostream>usingnamespace std;int main(){int n;//计算n!,n值即使不大,但n!可能很大,最好使用long long longlong t =1;
cin>>n;for(int i=1;i<=n;i++){
t *= i;//第i次循环:t累乘上i}
cout<<t;return0;}
#include<iostream>
using namespace std;
int main()
{
int i;
double s = 0;
for(i=1;i<=100;i++){
if(i%2==0)
s += -1.0/i;
else
s += 1.0/i;
}
cout<<s;
return 0;
}
#include<iostream>usingnamespace std;int main(){int i;double s =0;for(i=1;i<=100;i++){if(i%2==0)
s +=-1.0/i;else
s +=1.0/i;}
cout<<s;return0;}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
intmain()
{
double s = 0;
//控制变量i的定义和赋初值都在for循环中
for(int i=1;i<=100;i++){
if(i%2==0)
s += -1.0/i; //s -= 1.0/i;
else
s += 1.0/i;
}
cout<<s;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
double s = 0;
//控制变量i的定义和赋初值都在for循环中
for(int i=1;i<=100;i++){
if(i%2==0)
s += -1.0/i; //s -= 1.0/i;
else
s += 1.0/i;
}
cout<<s;
return 0;
}
#include<iostream>usingnamespace std;int main(){double s =0;//控制变量i的定义和赋初值都在for循环中for(int i=1;i<=100;i++){if(i%2==0)
s +=-1.0/i;//s -= 1.0/i;else
s +=1.0/i;}
cout<<s;return0;}
#include<iostream>
using namespace std;
int main()
{
//本程序使用double类型控制变量,计算结果与预期不一致
double s = 0;
for(double i=0.001;i<=1;i+=0.001){
s += 1/i;
}
cout<<s<<endl;
return 0;
}
#include<iostream>usingnamespace std;int main(){//本程序使用double类型控制变量,计算结果与预期不一致double s =0;for(double i=0.001;i<=1;i+=0.001){
s +=1/i;}
cout<<s<<endl;return0;}
#include<iostream>
using namespace std;
int main()
{
int i;
double s = 0;
for(i=1;s<=5;i++){
s += 1.0/i;
}
cout<<i-1;
return 0;
}
#include<iostream>usingnamespace std;int main(){int i;double s =0;for(i=1;s<=5;i++){
s +=1.0/i;}
cout<<i-1;return0;}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
intmain()
{
double s = 0;
//循环控制变量i在循环体中定义
for(int i=1;s<=5;i++){
s += 1.0/i;
}
//出了循环后不能使用i,会出现编译错误
cout<<i-1;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
double s = 0;
//循环控制变量i在循环体中定义
for(int i=1;s<=5;i++){
s += 1.0/i;
}
//出了循环后不能使用i,会出现编译错误
cout<<i-1;
return 0;
}
#include<iostream>usingnamespace std;int main(){double s =0;//循环控制变量i在循环体中定义 for(int i=1;s<=5;i++){
s +=1.0/i;}//出了循环后不能使用i,会出现编译错误
cout<<i-1;return0;}
#include<iostream>
using namespace std;
int main()
{
int n,m,min;
cin>>n>>min; //第1个数直接输入到min中
for(int i=2;i<=n;i++){ //输入并处理第2~n个数
cin>>m;
if(m<min) min = m;
}
cout<<min;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int s = 0;
for(int i=1;i<=100;i++){
//发现i是奇数,continue不作处理直接进入下次循环
if(i%2==1) continue;
s += i;
}
cout<<s;
return 0;
}
#include<iostream>usingnamespace std;int main(){int s =0;for(int i=1;i<=100;i++){//发现i是奇数,continue不作处理直接进入下次循环 if(i%2==1)continue;
s += i;}
cout<<s;return0;}
需要注意的是,这里只是演示需要使用了continue来解决问题,针对本问题更简洁的程序如下:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
intmain()
{
int s = 0;
for(int i=2;i<=100;i+=2){
s += i;
}
cout<<s;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int s = 0;
for(int i=2;i<=100;i+=2){
s += i;
}
cout<<s;
return 0;
}
#include<iostream>usingnamespace std;int main(){int s =0;for(int i=2;i<=100;i+=2){
s += i;}
cout<<s;return0;}
#include<iostream>
using namespace std;
int main()
{
long long t,s = 0;
int n;
cin>>n;
for(int i=1;i<=n;i++){
// 计算 i!保存到t中(待实现)
s += t;
}
cout<<s;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
long long t,s = 0;
int n;
cin>>n;
for(int i=1;i<=n;i++){
t = 1;
for(int j=1;j<=i;j++) t *= j;
s += t;
}
cout<<s;
return 0;
}
#include<iostream>usingnamespace std;int main(){longlong t,s =0;int n;
cin>>n;for(int i=1;i<=n;i++){
t =1;for(int j=1;j<=i;j++) t *= j;
s += t;}
cout<<s;return0;}
#include<iostream>
using namespace std;
int main()
{
long long t = 1,s = 0;
int n;
cin>>n;
for(int i=1;i<=n;i++){
t *= i; //t是i!
s += t;
}
cout<<s;
return 0;
}
#include<iostream>usingnamespace std;int main(){longlong t =1,s =0;int n;
cin>>n;for(int i=1;i<=n;i++){
t *= i;//t是i!
s += t;}
cout<<s;return0;}
#include<iostream>
using namespace std;
int main()
{
for(int i=100;i<=999;i++){
int g = i%10;
int s = i/10%10;
int b = i/100%10;
if(g*g*g+s*s*s+b*b*b==i) cout<<i<<" ";
}
return 0;
}
#include<iostream>usingnamespace std;int main(){for(int i=100;i<=999;i++){int g = i%10;int s = i/10%10;int b = i/100%10;if(g*g*g+s*s*s+b*b*b==i) cout<<i<<" ";}return0;}
for(int d1=1;d1<=9;d1+=2) //只考虑个位上的数是奇数的情况(个位数是偶数肯定不是质数)
for(int d2=0;d2<=9;d2++)
for(int d3=0;d3<=9;d3++){
int n = d1*10000+d2*1000+d3*100+d2*10+d1;
}
for(int d1=1;d1<=9;d1+=2)//只考虑个位上的数是奇数的情况(个位数是偶数肯定不是质数)for(int d2=0;d2<=9;d2++)for(int d3=0;d3<=9;d3++){int n = d1*10000+d2*1000+d3*100+d2*10+d1;}
并且这里只需要构造3位、5位、7位回文数并考查是否在[a,b]范围内且是质数,还需要额外考查1位回文质数(5、7)和2位回文质数(11)是否在[a,b]范围内(题目指出5 \le a < b \le 100,000,000,所以不用考虑2)。不需要考虑偶数位的回文数(11除外)是否为质数,因为通过数学知识可知偶数位的回文数都是11的倍数,除11外都不是质数。
#include<iostream>
using namespace std;
int main()
{
for(int i=100;i<=999;i++){
int g = i%10;
int s = i/10%10;
int b = i/100%10;
if(g*g*g+s*s*s+b*b*b==i) cout<<i<<" ";
}
return 0;
}
#include<iostream>usingnamespace std;int main(){for(int i=100;i<=999;i++){int g = i%10;int s = i/10%10;int b = i/100%10;if(g*g*g+s*s*s+b*b*b==i) cout<<i<<" ";}return0;}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
intmain()
{
for(int b=1;b<=9;b++){
for(int s=0;s<=9;s++){
for(int g=0;g<=9;g++){
//百位上的数b,十位上的数s,个位上的数g
int n = b*100+s*10+g;
if(g*g*g+s*s*s+b*b*b==n) cout<<n<<" ";
}
}
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
for(int b=1;b<=9;b++){
for(int s=0;s<=9;s++){
for(int g=0;g<=9;g++){
//百位上的数b,十位上的数s,个位上的数g
int n = b*100+s*10+g;
if(g*g*g+s*s*s+b*b*b==n) cout<<n<<" ";
}
}
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
long long t,s = 0;
int n;
cin>>n;
for(int i=1;i<=n;i++){
t = 1;
for(int j=1;j<=i;j++) t *= j;
s += t;
}
cout<<s;
return 0;
}
#include<iostream>usingnamespace std;int main(){longlong t,s =0;int n;
cin>>n;for(int i=1;i<=n;i++){
t =1;for(int j=1;j<=i;j++) t *= j;
s += t;}
cout<<s;return0;}
#include<iostream>
using namespace std;
int main()
{
long long t = 1,s = 0;
int n;
cin>>n;
for(int i=1;i<=n;i++){
t *= i; //t是i!
s += t;
}
cout<<s;
return 0;
}
#include<iostream>usingnamespace std;int main(){longlong t =1,s =0;int n;
cin>>n;for(int i=1;i<=n;i++){
t *= i;//t是i!
s += t;}
cout<<s;return0;}
那么该如何处理呢?我们注意到了题目中给出了数据规模——1 \le n \le 10000,所以最多只会输入10000个整数,那么我们就按照数据规模的极限值开数组,这样肯定能满足所有情况。但是这样做有一个缺点就是如果运行时输入的n值远小于数据规模,数组大量的存储空间没有使用起来,浪费了存储空间。不过竞赛时推荐使用这样的方式,即使C++中也支持其它动态开数组的方法(感兴趣的同学可自行百度)。
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
int a[10000]; //按照数据规模的极限值开数组
intmain()
{
int n;
cin>>n;
double avg = 0;
for(int i=0;i<n;i++){
cin>>a[i];
avg += a[i];
}
avg /= n;
for(int i=0;i<n;i++){
if(a[i]<avg){
cout<<a[i]<<" ";
}
}
return 0;
}
#include<iostream>
using namespace std;
int a[10000]; //按照数据规模的极限值开数组
int main()
{
int n;
cin>>n;
double avg = 0;
for(int i=0;i<n;i++){
cin>>a[i];
avg += a[i];
}
avg /= n;
for(int i=0;i<n;i++){
if(a[i]<avg){
cout<<a[i]<<" ";
}
}
return 0;
}
高版本C++(版本不低于 C++ 11)得益于 for 循环的高级用法,可以使用更简洁的方式遍历数组,方法如下:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
intmain()
{
for(int n : a){
cout << n << endl;
}
return 0;
}
#include<iostream>
using namespace std;
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int main()
{
for (int n : a) {
cout << n << endl;
}
return 0;
}
#include<iostream>usingnamespace std;int a[10]={1,2,3,4,5,6,7,8,9,10};int main(){for(int n : a){
cout << n << endl;}return0;}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
intmain()
{
//通过引用方式遍历数组元素(注意:控制变量 n 前面有&符号)
for(int &n : a){
//在循环体中,修改引用变量 n 的值,可以修改对应数组元素的值
if(n%2==0) n = 0;
}
for(int n : a){
cout << n << endl;
}
return 0;
}
#include<iostream>
using namespace std;
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int main()
{
//通过引用方式遍历数组元素(注意:控制变量 n 前面有&符号)
for (int &n : a) {
//在循环体中,修改引用变量 n 的值,可以修改对应数组元素的值
if(n%2==0) n = 0;
}
for (int n : a) {
cout << n << endl;
}
return 0;
}
#include<iostream>usingnamespace std;int a[10]={1,2,3,4,5,6,7,8,9,10};int main(){//通过引用方式遍历数组元素(注意:控制变量 n 前面有&符号)for(int&n : a){//在循环体中,修改引用变量 n 的值,可以修改对应数组元素的值if(n%2==0) n =0;}for(int n : a){
cout << n << endl;}return0;}
这里输入的整数集中在一个区间0~10000,那我们开一个数组a[10001]用来存放0~10000每个整数出现的次数,a[0]存放的是0出现的次数,a[1]存放的是1出现的次数,……,a[10000]存放的是10000出现的次数(抽象概括就是数组 a[i]元素存放的是整数 i 出现的次数),这样整数和存放整数出现次数的数组元素下标一一对应。那么输入一个整数k,意味着k出现了一次,只需要a[k]++即可更新它出现的次数。所有数据输入完毕后,数组中存放了这个范围内的每个整数出现的次数,只需要计算数组所有元素的最大值即可。
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
//开全局int数组,数组的每个元素初始值为0
//正好符合开始时,每个数出现的次数为0
int a[10001];
intmain()
{
int n,k;
cin>>n;
for(int i=1;i<=n;i++){
cin>>k;
a[k]++; //k出现次数+1
}
//打擂求数组所有元素最大值
int max = 0;
for(int i=0;i<=10000;i++){
if(a[i]>max) max = a[i];
}
cout<<max<<endl;
return 0;
}
#include<iostream>
using namespace std;
//开全局int数组,数组的每个元素初始值为0
//正好符合开始时,每个数出现的次数为0
int a[10001];
int main()
{
int n,k;
cin>>n;
for(int i=1;i<=n;i++){
cin>>k;
a[k]++; //k出现次数+1
}
//打擂求数组所有元素最大值
int max = 0;
for(int i=0;i<=10000;i++){
if(a[i]>max) max = a[i];
}
cout<<max<<endl;
return 0;
}
#include<iostream>usingnamespace std;//开全局int数组,数组的每个元素初始值为0//正好符合开始时,每个数出现的次数为0 int a[10001];int main(){int n,k;
cin>>n;for(int i=1;i<=n;i++){
cin>>k;
a[k]++;//k出现次数+1 }//打擂求数组所有元素最大值 int max =0;for(int i=0;i<=10000;i++){if(a[i]>max) max = a[i];}
cout<<max<<endl;return0;}
如果还是 cin>>k; a[k]++; 很显然,输入负数的时候,下标k是负数,这不符合语法,会出现运行时错误。那怎么避免下标出现负数呢?开一个数组a[20001]用来存放-10000~10000每个整数出现的次数,a[0]存放的是-10000出现的次数,a[1]存放的是-9999出现的次数,……,a[10000]存放的是0出现的次数,a[10001]存放的是1出现的次数,……,a[20000]存放的是10000出现的次数(抽象概括就是数组 a[i+10000]元素存放的是整数 i 出现的次数),这样整数和存放整数出现次数的数组元素下标仍然一一对应。那么输入一个整数k,意味着k出现了一次,只需要a[k+10000]++即可更新它出现的次数。
整数
-10000
-9999
-9998
...
0
1
...
i
...
10000
存放整数出现次数 的数组元素
a[0]
a[1]
a[2]
...
a[10000]
a[10001]
...
a[i+10000]
...
a[20000]
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
constint N = 10000;
//开全局int数组,数组的每个元素初始值为0
//正好符合开始时,每个数出现的次数为0
int a[2*N+1];
intmain()
{
int n,k;
cin>>n;
for(int i=1;i<=n;i++){
cin>>k;
a[k+N]++; //k出现次数+1
}
//打擂求数组所有元素最大值
int max = 0;
for(int i=-N;i<=N;i++){
if(a[i+N]>max) max = a[i];
}
cout<<max<<endl;
return 0;
}
#include<iostream>
using namespace std;
const int N = 10000;
//开全局int数组,数组的每个元素初始值为0
//正好符合开始时,每个数出现的次数为0
int a[2*N+1];
int main()
{
int n,k;
cin>>n;
for(int i=1;i<=n;i++){
cin>>k;
a[k+N]++; //k出现次数+1
}
//打擂求数组所有元素最大值
int max = 0;
for(int i=-N;i<=N;i++){
if(a[i+N]>max) max = a[i];
}
cout<<max<<endl;
return 0;
}
#include<iostream>usingnamespace std;constint N =10000;//开全局int数组,数组的每个元素初始值为0//正好符合开始时,每个数出现的次数为0 int a[2*N+1];int main(){int n,k;
cin>>n;for(int i=1;i<=n;i++){
cin>>k;
a[k+N]++;//k出现次数+1 }//打擂求数组所有元素最大值 int max =0;for(int i=-N;i<=N;i++){if(a[i+N]>max) max = a[i];}
cout<<max<<endl;return0;}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
constint N = 10000;
//开全局int数组,数组的每个元素初始值为0
//正好符合开始时,每个数出现的次数为0
int a[2*N+1];
intmain()
{
int n,k;
cin>>n;
for(int i=1;i<=n;i++){
cin>>k;
a[k+N]++; //k出现次数+1
}
//从小到大依次考察每个整数
for(int i=-N;i<=N;i++){
//i出现过,输出i
if(a[i+N]>0) cout<<i<<" ";
}
return 0;
}
#include<iostream>
using namespace std;
const int N = 10000;
//开全局int数组,数组的每个元素初始值为0
//正好符合开始时,每个数出现的次数为0
int a[2*N+1];
int main()
{
int n,k;
cin>>n;
for(int i=1;i<=n;i++){
cin>>k;
a[k+N]++; //k出现次数+1
}
//从小到大依次考察每个整数
for(int i=-N;i<=N;i++){
//i出现过,输出i
if(a[i+N]>0) cout<<i<<" ";
}
return 0;
}
#include<iostream>usingnamespace std;constint N =10000;//开全局int数组,数组的每个元素初始值为0//正好符合开始时,每个数出现的次数为0 int a[2*N+1];int main(){int n,k;
cin>>n;for(int i=1;i<=n;i++){
cin>>k;
a[k+N]++;//k出现次数+1 }//从小到大依次考察每个整数 for(int i=-N;i<=N;i++){//i出现过,输出i if(a[i+N]>0) cout<<i<<" ";}return0;}
#include<iostream>
using namespace std;
int main()
{
int n;
long long f1,f2,f3; //值增加较快,使用long long
cin>>n;
f1 = f2 = 1;
if(n>=1) cout<<1<<":"<<f1<<endl;
if(n>=2) cout<<2<<":"<<f2<<endl;
for(int i=3;i<=n;i++){
f3 = f2+f1;
cout<<i<<":"<<f3<<endl;
f1 = f2;
f2 = f3;
}
return 0;
}
#include<iostream>usingnamespace std;int main(){int n;longlong f1,f2,f3;//值增加较快,使用long long
cin>>n;
f1 = f2 =1;if(n>=1) cout<<1<<":"<<f1<<endl;if(n>=2) cout<<2<<":"<<f2<<endl;for(int i=3;i<=n;i++){
f3 = f2+f1;
cout<<i<<":"<<f3<<endl;
f1 = f2;
f2 = f3;}return0;}
当然可以使用数组来解决问题:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
longlong a[93] = {0,1,1}; //数组元素部分赋值
intmain()
{
int n;
cin>>n;
for(int i=3;i<=n;i++) a[i] = a[i-1]+a[i-2];
for(int i=1;i<=n;i++) cout<<i<<":"<<a[i]<<endl;
return 0;
}
#include<iostream>
using namespace std;
long long a[93] = {0,1,1}; //数组元素部分赋值
int main()
{
int n;
cin>>n;
for(int i=3;i<=n;i++) a[i] = a[i-1]+a[i-2];
for(int i=1;i<=n;i++) cout<<i<<":"<<a[i]<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int n;
long long m = 0;
char one;
cin>>n;
while(cin>>one){
m = m*n; //m放大n倍
if(one>='0' && one<='9'){ //输入的是'0'~'9'中的某个字符
m += one - '0'; //one-'0'就是该位数字
}else if(one>='A' && one<='F'){ //输入的是'A'~'F'中的某个字符
m += 10 + one - 'A'; //10+one-'A'就是该位数字
}
}
cout<<m;
return 0;
}
#include<iostream>usingnamespace std;int main(){int n;longlong m =0;char one;
cin>>n;while(cin>>one){
m = m*n;//m放大n倍if(one>='0'&& one<='9'){//输入的是'0'~'9'中的某个字符
m += one -'0';//one-'0'就是该位数字}elseif(one>='A'&& one<='F'){//输入的是'A'~'F'中的某个字符
m +=10+ one -'A';//10+one-'A'就是该位数字}}
cout<<m;return0;}
#include<iostream>
using namespace std;
int main()
{
int x,a,b,c;
cin>>x;
c = x/4;
a = b = 0;
int mod = x%4;
if(mod == 1){
b++;c--;
}else if(mod == 2){
a++,c--;
}else if(mod == 3){
a++,b++,c-=2;
}
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}
#include<iostream>usingnamespace std;int main(){int x,a,b,c;
cin>>x;
c = x/4;
a = b =0;int mod = x%4;if(mod ==1){
b++;c--;}elseif(mod ==2){
a++,c--;}elseif(mod ==3){
a++,b++,c-=2;}
cout<<a<<" "<<b<<" "<<c<<endl;return0;}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
intmain()
{
int x,a,b,c;
cin>>x;
c = x/4;
a = b = 0;
switch(x%4){
case 1:b++;c--;break;
case 2:a++,c--;break;
case 3:a++;b++;c-=2;break;
}
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int x,a,b,c;
cin>>x;
c = x/4;
a = b = 0;
switch(x%4){
case 1:b++;c--;break;
case 2:a++,c--;break;
case 3:a++;b++;c-=2;break;
}
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}
#include<iostream>usingnamespace std;int main(){int x,a,b,c;
cin>>x;
c = x/4;
a = b =0;switch(x%4){case1:b++;c--;break;case2:a++,c--;break;case3:a++;b++;c-=2;break;}
cout<<a<<" "<<b<<" "<<c<<endl;return0;}
这里也可以使用数组来解决问题,此时甚至可以不使用分支结构(大家自行分析下面的程序):
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<iostream>
usingnamespace std;
intmain()
{
int x;
cin>>x;
int ans[3] = {0,0,x/4};
int change[4][3] = {
{0,0,0},
{0,1,-1},
{1,0,-1},
{1,1,-2},
};
int mod = x%4;
for(int i=0;i<3;i++)
cout<<ans[i]+change[mod][i]<<" ";
cout<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int x;
cin>>x;
int ans[3] = {0,0,x/4};
int change[4][3] = {
{0,0,0},
{0,1,-1},
{1,0,-1},
{1,1,-2},
};
int mod = x%4;
for(int i=0;i<3;i++)
cout<<ans[i]+change[mod][i]<<" ";
cout<<endl;
return 0;
}