C/C++语言基础进阶算法备赛面试 经典、实用、趣味 程序设计编程300例精解每日一练第20天

前言:

备赛蓝桥杯,大学电子设计大赛,C语言提高,算法准备,定位大厂刷题,所以每天一练,不是很适合新手,适合长期规划有一定基础的同学跟上,每日文档由三部分组成,基础题(适合备赛国二),趣味题(适合有兴趣的同学),经典算法题(适合更高要求)组成。当然本意是记录自己训练的过程,基础题基本能做出来,能给自己一个正面回馈,趣味题可以培养兴趣,经典算法题用于真正来训练自己,开眼见长见识,在遇到困难的问题有更好的解决办法,最关键是每天三个题充分利用了零碎时间,细水才能长流,共勉坚持!!!!

基础题:

【程序20】 题目:画图,综合例子。

1.程序分析:

2.程序源代码:

#include "graphics.h" 

#define LEFT 0 

#define TOP 0 

#define RIGHT 639 

#define BOTTOM 479 

#define LINES 400 

#define MAXCOLOR 15 

main() 

{ 

int driver,mode,error; 

int x1,y1; 

int x2,y2; 

int dx1,dy1,dx2,dy2,i=1; 

int count=0; 

int color=0; 

driver=VGA; 

mode=VGAHI; 

initgraph(&driver,&mode,""); 

x1=x2=y1=y2=10; 

dx1=dy1=2; 

dx2=dy2=3; 

while(!kbhit()) 

{ 

 line(x1,y1,x2,y2); 

 x1+=dx1;y1+=dy1; 

 x2+=dx2;y2+dy2; 

 if(x1<=LEFT||x1>=RIGHT) 

 dx1=-dx1; 

 if(y1<=TOP||y1>=BOTTOM) 

  dy1=-dy1; 

 if(x2<=LEFT||x2>=RIGHT) 

  dx2=-dx2; 

 if(y2<=TOP||y2>=BOTTOM) 

  dy2=-dy2; 

 if(++count>LINES) 

 { 

  setcolor(color); 

  color=(color>=MAXCOLOR)?0:++color; 

 } 

} 

closegraph(); 

}

趣味题:

20.一个奇异的三位数

一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码正好相反,求这个三位数。

*问题分析与算法设计

根据题意可知,七进制和九进制表示的这全自然数的每一位一定小于7,可设其七进制数形式为kji(i、j、k的取值分别为1~6),然后设其九进制表示形式为ijk。

*程序说明与注释
#include<stdio.h>
int main()
{
int i,j,k;
for(i=1;i<7;i++)
for(j=0;j<7;j++)
for(k=1;k<7;k++)
if(i*9*9+j*9+k==i+j*7+k*7*7)
{
printf("The special number with 3 digits is:");
printf("%d%d%d(7)=%d%d%d(9)=%d(10)\n",k,j,i,i,j,k,i*9*9+j*9+k);
}
}

*运行结果
The special number with 3 digits is:503(7)=305(9)=248(10)

经典算法题:

20.阿姆斯壮数

说明
在三位的整数中,例如153可以满足13 + 53 + 33 = 153,这样的数称之为Armstrong数,试写出一程式找出所有的三位数Armstrong数。
解法
Armstrong数的寻找,其实就是在问如何将一个数字分解为个位数、十位数、百位数…,这只要使用除法与余数运算就可以了,例如输入 input为abc,则:
a = input / 100
b = (input%100) / 10
c = input % 10

#include <stdio.h> 
#include <time.h> 
#include <math.h> 

int main(void) { 
    int a, b, c; 
    int input; 

    printf("寻找Armstrong数:\n"); 

    for(input = 100; input <= 999; input++) { 
        a = input / 100; 
        b = (input % 100) / 10; 
        c = input % 10; 
        if(a*a*a + b*b*b + c*c*c == input) 
            printf("%d ", input); 
    } 

    printf("\n"); 

    return 0; 
} 

后续

有更优秀的解法和更优秀的训练题评论区留言,多交流!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄黄在深夜里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值