基础练习
I 0-1字符串
对于长度为N位(N<32)的一格字符串,每一位都可能是0或1,请从小到大输出者2^N种01字符串
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int n; scanf("%d",&n); char *t = (char *)malloc(sizeof(char)*(n+1)); memset(t,'0',n); t[n] = '\0'; for(int i=0;i<(1 << n);i++)//2^n次 { puts(t); t[n-1] += 1; if(t[n-1] > '1') { for(int j=2;j<=n;j++) { t[n-j] += 1; t[n-j+1] ='0'; if(t[n-j] == '1') break; } } } return 0; }
II杨辉三角形
杨辉三角形又称Paskal三角形,它的第i+1行是(a+b)^i的展开式的系数,给出n,输出它的前n行
样例输入:4
样例输出:
1
1 1
1 2 1
1 3 3 1
分析:三角形的每个数字等于它的两肩上的数字相加
//f(i,1)=f(i,i)=1 //f(i,k)=f(i,k-1)+f(i,k)(1<k<i,i>2) #include <stdio.h> int f[34][34]; int main() { int n; scanf("%d",&n); if(n == 1) { printf("1\n"); } else if(n == 2){ printf("1\n1 1\n"); } else{ printf("1\n"); for(int t=1;t<n;t++) f[t][0] = f[t][t] = 1; for(int i=1;i<n;i++) { for(int j=0;j<=i;j++) { if(j == 0) printf("1 "); else if(j == i){ printf("1\n"); } else{ f[i][j] = f[i-1][j-1] + f[i-1][j]; printf("%d ",f[i][j]); } } } } return 0; }
III特殊回文数
输入一个正整数n(<=54),编程求所有的5位和6位十进制回文数,满足各位数字之和等于n,按从小到大的顺序输出满足条件的整数,每个整数占一行
分析:取对称的3位数字,满足各位数字之和为n的即为对应的回文数
#include <stdio.h> int main() { int n,a,b,c; scanf("%d",&n); for(a=1;a<10;a++) for(b=0;b<10;b++) for(c=0;c<10;c++) { if(2*(a + b) + c == n) printf("%d\n",a*10001+b*1010+c*100);//5位回文数 } for(a=1;a<10;a++) for(b=0;b<10;b++) for(c=0;c<10;c++) { if(2*(a + b + c) == n) printf("%d\n",a*100001+b*10010+c*1100);//6位回文数 } return 0; }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步