翁恺B站练习题目(持续更新中~~~)
求符合条件的给定数集
题目要求:
给定不超过6的正整数A。考虑从A开始的连续4个数字。请输出所有由它们组成的无重数字的3位数。
#include<stdio.h>
int main()
{
int A=0;
do{
scanf("%d",&A);
}while(A>=6);
int ret=0;
int max=(A+3)*100+(A+2)*10+(A+1);
int x,y,z;
int cnt=0;
for(x=A;x<=A+3;x++){
for(y=A;y<=A+3;y++){
for(z=A;z<=A+3;z++){
if(x!=y&x!=z&z!=y){
ret=x*100+y*10+z;
printf("%d",ret);
cnt++;
if(cnt==6){
printf("\n");
cnt=0;
}else{
printf(" ");
}
}
}
}
}
}
水仙花数
题目要求:
水仙花数是指一个N位正整数(N>=3) ,它的每个位上的数字的N次幕之和等于它本身。例如:153=13+53+ 33。本题要求编写程序,计算所有N位水仙花数
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
n=3;
int first=1;
int i=1;
while(i<n){
first*=10;
i++;
}
i=first;
while(i<first*10){
int t=i;
int sum=0;
do{
int d=t%100;
t/=10;
int p=d;
int j=1;
while( j<n) {
p *= d;
j++;
}
sum+=p;
}while(t>0);
if(sum==i){
printf("%d\n",i);
}
i++;
}
}
九九乘法表
题目要求:
按照梯度输出九九乘法表
#include<stdio.h>
main()
{
int x,y,n;
scanf("%d",&n);
for(y=1;y<=n;y++){
for(x=1;x<=y;x++){
printf("%d*%d=%d",x,y,x*y);
if(x*y<10){
printf(" ");
} else{
printf(" ");
}
}
printf("\n");
}
}
统计素数并求和
题目要求:
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
#include<stdio.h>
main()
{
int m,n;
scanf("%d %d",&m,&n);
m=10;
n=31;
int cnt=0;
int t=m;
int sum=0;
while(t<=n){//最大的这个循环意思是t++ 循环的动作意思是判断t是否是素数,是的话就加上他
int p; //判断是否是素数的时候又要用到循环
int is=1;
for(p=2;p<t;p++){//这个循环的意思是:在再大的循环里面有一个数,除以p++,判断是否为素数
int q=t%p;
if(q==0){
is=0;
break;
}
}
if(is==1){
printf("%d\n",t);
cnt++;
sum+=t;
}
t++;
}
printf("cont is %d ,sum is %d",cnt,sum);
}
求序列前n项和
题目要求
本题要求编写程序,计算序列2/1+3/2+5/3+8/5+...的前N项之和。注意该序列从第2项起,每项的分子是前一项分子与分母的和,分母是前一项的分子。
#include<stdio.h>
main()
{
int n;
scanf("%d",&n);
int j;
int up=2;
int down=1;
int i=0;
double sum=0;
for(j=1;j<=n;j++){
sum+=1.0*up/down;
i=up;
up+=down;
down=i;
printf("%d %d\n",up,down);
}
printf("sum is %.2f",sum);
}
正序分解
题目要求:
任意输入一个数,正序分解输出
#include<stdio.h>
main()
{
int x;
scanf("%d",&x);
// 判断位数
int mask=1;
int t=x;
do{
x/=10;
mask*=10;
printf("%d\n",mask);
}while(x>9);
x=t;
// 拆解数
int d=0;
do{
d=x;
d/=mask;
printf("%d ",d);
x%=mask;
mask/=10;
} while(mask>0);
}
约分最简式(求最大公约数)
提示:
辗转相除法
#include<stdio.h>
int main()
{
int dividend,divisor;
scanf("%d/%d",÷nd,&divisor);
int a=dividend;
int b=divisor;
int t;
while(b>0){
t=a%b;
a=b;
b=t;
}
printf("%d/%d",dividend,divisor);
return 0;
}
念数字
提示:
拆解一个数+负号处理+switch case
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
if(x<0){
printf("fu");
x=-x;
}
int mask=1;
int t=x;
while(t>9){
t=/10;
mask*=10;
}
do{
int d=x/mask;
switch(d){
case 0:printf('ling');break;
case 1:printf('yi');break;
case 2:printf('er');break;
case 3:printf('san');break;
case 4:printf('si');break;
case 5:printf('wu');break;
case 6:printf('liu');break;
case 7:printf('qi');break;
case 8:printf('ba');break;
case 9:printf('jiu');break;
}
if(mask>0)printf("");
x%=mask;
mask/=10;
}while(mask>0);
printf("\n");
return 0;
}