一道面试题(C语言)
2018-12-04 07:15:01来源:博客园 阅读 ()
题:输入一个数,列出所有加和等于该数的式子。
分析:
以 6 为例:
从上面的分析就比较容易找到规律了。
C语言代码:
1 #include <stdio.h> 2 3 int main() 4 { 5 int n; // 输入的数 6 printf("Please input the number:"); 7 scanf("%d",&n); 8 test(n); 9 } 10 11 void test(int n) 12 { 13 if(n==1){ 14 printf("1=1\n"); 15 return; 16 } 17 int i,j,k; // 循环变量 18 for(i=1;i<=n/2;i++) 19 { 20 for(j=(n-i);j>=i;j--) 21 { 22 printf("%d",i); 23 for(k=0;k<(n-i-j);k++) 24 { 25 printf("+1"); 26 } 27 printf("+%d=%d\n",j,n); 28 } 29 } 30 }
这是同学去面试的时候,给的一道上机题,刚看到我就想用递归(当然,没有做出来),所以……for循环大法好(^_^)
上面的是错的,心痛,这个应该是对的吧,缺点就是只能正常输出20以内的,数组变成指针会好些??
1 #include <stdio.h> 2 int main() 3 { 4 int num; 5 int i,j,k,p,q,r; 6 int flag=1; 7 int a[20]; 8 int temp=0; 9 printf("Please input the number:"); 10 scanf("%d",&num); 11 for(i=2;i<=num;) 12 { 13 if(flag) 14 { 15 for(j=0;j<i;j++) a[j] = 1; 16 a[i-1] = num-(i-1); 17 flag = 0; 18 for(j=0;j<i;j++) 19 { 20 if(j==0) printf("%d",a[j]); 21 else printf("+%d",a[j]); 22 } 23 printf("=%d\n",num); 24 } 25 if(!flag) 26 { 27 for(p=2;p<=i;) 28 { 29 for(k=i-1;k>0;k--) 30 if((k-p+1)>=0 && a[k]-a[k-p+1]>=2) 31 { 32 for(q=k;q>=k-p+1;q--) temp += a[q]; 33 a[k-p+1]++; 34 for(r=k-p+2;r<k;r++) a[r]=a[k-p+1]; 35 a[k] = temp - (p-1)*a[k-p+1]; 36 temp=0; 37 for(j=0;j<i;j++) 38 { 39 if(j==0) printf("%d",a[j]); 40 else printf("+%d",a[j]); 41 } 42 printf("=%d\n",num); 43 break; 44 } 45 if(k==0) p++; 46 } 47 flag=1; 48 } 49 if(flag) i++; 50 } 51 return 0; 52 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- C语言程序结构 2020-05-31
- 每日干货丨C++语言主流开发工具推荐! 2020-04-28
- C语言实现经典游戏——扫雷! 2020-04-17
- 翻转字符串里面的单词 2020-04-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash