1. | 完数(循环) 【问题描述】一个数如果恰好等于它的因子之和,这个数就成为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序打印出1000之内(包括1000)所有的完数,并按如下格式输出其所有因子: 6 its factors are 1,2,3. 【输入形式】无输入 【输出形式】输出1000以内所有的完数及其因子,每行输出一个完数及其因子。 6 its factors are 1,2,3. 【提示】完数不止一个哦!而且最后一个数后面的结束标点符号是英文状态的句号。 |
---|
#include<bits/stdc++.h>
using namespace std;
int main()
{
for(int i=2;i<=1000;i++)
{
int sum=0;
for(int j=1;j<=i-1;j++)
{
if(i%j==0)
sum+=j;
}
if(i==sum)
{
printf("%d its factors are ",i);
int num=0;
for(int k=1;k<=i-1;k++)
{
if(i%k==0)
{
num++;
if(num==1)
printf("%d",k);
else
printf(",%d",k);
}
}
printf(".\n");
}
}
}
2. | 简单计算器(while循环-switch语句)
【问题描述】编写一个根据用户键入的两个操作数和一个运算符,由计算机输出运算结果的程序。当键入的两个操作数为0时,结束运算。 【输入形式】两个操作数和一个运算符(运算符只包括五个:+-*/%)。当键入的两个操作数为0时,结束运算。若出现其他非法运算符号,输出Error。若运算符为‘/’,除数为0时,输出Error。 【输出形式】每输入一组数据,则显示一个计算结果并换行等待键入下一组测试数据。 【样例输入】 3 5 * 3 5 - 12 12 # 12 12 * 5 0 / 0 0 + 【样例输出】 15 -2 Error 144 Error 【提示】最外层用while(1)的循环,内层用switch(ch)判断运算符号来进行计算。 |
---|
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
char x;
cin >> a>>b;
cin >> x;
while(a!=0 || b!=0)
{
switch(x)
{
case '+':
cout << a+b<<endl;
break;
case '-':
cout << a-b<<endl;
break;
case '*':
cout << a*b<<endl;
break;
case '/':
if(b==0)
cout << "Error"<<endl;
else
cout << a/b<<endl;
break;
case '%':
cout << a%b <<endl;
break;
default:
cout << "Error"<<endl;
break;
}
cin >> a >> b;
cin >> x;
}
}
3. | 数字菱形图案(双重循环)
【问题描述】编程打印用数字构成的菱形图案,菱形上半部分的行数n( 1<n<10 )从键盘输入,总行数为2n-1。图案的样式按下面的样例。 【输入形式】从键盘输入包括中间一行在内的菱形上半部分的行数n ( 1<n<10 )。 【输出形式】输出用数字构成的菱形图案,样式按下面的样例,其中各数字间用1个空格间隔,最中间最长的一行的起始数字1位于第1列。 【样例输入】4 【样例输出】 1 |
---|
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
//图案的前n行
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i-1;j++)
cout << " ";
for(int j=1;j<=i+1;j++)
cout << j<< " ";
for(int j=i;j>=1;j--)
cout << j<< " ";
for(int j=0;j<n-i-1;j++)
cout << " ";
cout << endl;
}
//图案的后n-1行
for(int i=1;i<n;i++)
{
for(int j=1;j<=i;j++)
cout << " ";
for(int j=1;j<=n-i;j++)
cout << j<<" ";
for(int j=n-i-1;j>=1;j--)
cout << j << " ";
for(int j=1;j<=i;j++)
cout << " ";
cout << endl;
}
}
4. | 水仙花数 【问题描述】输入两个正整数m和n(m<n<1000),输出m到n之间的所有水仙花数。水仙花数是指各位数字的立方和等于其自身的数。例如,153的各位数字的立方和是13+53+33 =153。 【输入形式】从键盘输入两个正整数m和n。 【输入输出样例1】(下划线部分表示输入) Input m: 100 Input n: 400 153 370 371 【样例说明】输入提示符后要加一个空格。其中冒号:后要加一个且只能一个空格。 每行输出一个水仙花数。英文字母区分大小写。必须严格按样例输入输出。 |
---|
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m,n;
cout << "Input m: ";
cin >> m ;
cout << "Input n: ";
cin >> n ;
int a,b,c;
for(int i=m;i<=n;i++)
{
a=i/100;//个位
b=(i/10)%10;//十位
c=i%10;
if(a*a*a+b*b*b+c*c*c==i)
{
cout << i<<endl;
}
}
return 0;
}
5. | 满足条件的整数(循环和函数) 【问题描述】假设a、b、c均为整数,且满足a,b,c 大于1,并且小于等于100,找出所有符合条件:“a的平方 + b的平方 = c的平方”的整数组。 【要求】 1、编写函数void Fun(int a, int b)寻找符合条件的三个数,其中ab分别表示数据起止范围1~100。 2、编写函数void Print(int a, int b ,int c)按照规定的输出格式打印等式,由fun函数调用print函数执行输出功能。 3、主函数不允许出现循环语句,所有功能均在子函数中实现。 【输入形式】无输入 按a从小到大的顺序输出所有满足条件的整数组(若a相同,则按b从小到大的顺序输出),每行一组,每一组数据的输出样式为: 3*3 + 4*4 = 5*5 注意: 1、3*3 + 4*4 = 5*5 和 4*4 + 3*3 = 5*5虽然是同一组数据,后者不需要输出; 2、加号和等号左右各有一个空格 3、9*9 + 12*12 = 15*15 (在前) 9*9 + 40*40 = 41*41 (在后) 【输出】 3*3 + 4*4 = 5*5 5*5 + 12*12 = 13*13 6*6 + 8*8 = 10*10 7*7 + 24*24 = 25*25 8*8 + 15*15 = 17*17 9*9 + 12*12 = 15*15 9*9 + 40*40 = 41*41 10*10 + 24*24 = 26*26 11*11 + 60*60 = 61*61 12*12 + 16*16 = 20*20 12*12 + 35*35 = 37*37 13*13 + 84*84 = 85*85 14*14 + 48*48 = 50*50 15*15 + 20*20 = 25*25 15*15 + 36*36 = 39*39 16*16 + 30*30 = 34*34 16*16 + 63*63 = 65*65 18*18 + 24*24 = 30*30 18*18 + 80*80 = 82*82 20*20 + 21*21 = 29*29 20*20 + 48*48 = 52*52 21*21 + 28*28 = 35*35 21*21 + 72*72 = 75*75 24*24 + 32*32 = 40*40 24*24 + 45*45 = 51*51 24*24 + 70*70 = 74*74 25*25 + 60*60 = 65*65 27*27 + 36*36 = 45*45 28*28 + 45*45 = 53*53 28*28 + 96*96 = 100*100 30*30 + 40*40 = 50*50 30*30 + 72*72 = 78*78 32*32 + 60*60 = 68*68 33*33 + 44*44 = 55*55 33*33 + 56*56 = 65*65 35*35 + 84*84 = 91*91 36*36 + 48*48 = 60*60 36*36 + 77*77 = 85*85 39*39 + 52*52 = 65*65 39*39 + 80*80 = 89*89 40*40 + 42*42 = 58*58 40*40 + 75*75 = 85*85 42*42 + 56*56 = 70*70 45*45 + 60*60 = 75*75 48*48 + 55*55 = 73*73 48*48 + 64*64 = 80*80 51*51 + 68*68 = 85*85 54*54 + 72*72 = 90*90 57*57 + 76*76 = 95*95 60*60 + 63*63 = 87*87 60*60 + 80*80 = 100*100 65*65 + 72*72 = 97*97 【提示】主函数就仅仅一条调用Fun函数的语句;Fun函数中设计三重循环,判断a*a+b*b==c*c时,且a<b时,调用Print函数执行输出,a<b可以在for里判断,也可以在输出前判断。 |
---|
#include<bits/stdc++.h>
using namespace std;
void Print(int a,int b,int c)
{
cout << a <<"*"<<a<<" + "<<b<<"*"<<b<<" = "<< c << "*" <<c<<endl;
}
void Fun(int a,int b)
{
for(int i=a;i<=b;i++)
{
for(int j=i;j<=b;j++)
{
for(int k=j;k<=b;k++)
{
if(i*i+j*j==k*k)
{
Print(i,j,k);
}
}
}
}
}
int main()
{
Fun(1,100);
return 0;
}