这种题目往往都是找出各个元素之间的规律。
1 我们可以发现,每一行的首元素之间的规律为:
a(n) = a(n - 1) + n - 1;
a(1) = 1;
这个结论很容易就用一个for循环实现。
2 再找出每一行元素之间的规律:
当输入的正整数为N时,第rows行将要输出 N-rows+1 个元素,而每行首元素和首元素下一个元素之间的增量inc为 rows+1,往后元素之间增量加1。
知道上面的规律之后就可以写程序了,参考代码如下:
#include <stdio.h> //N为总行数,rows为第几行,打印该行数据 void printN(int N, int rows) { //确定第rows行的第一个元素的值:a(n) = a(n-1) + n - 1; a1 = 1; int first = 1; int i; for (i = 1; i <= rows; i++) { first += i - 1; } //第rows行的第一个元素为first int tmp = first; //第rows行的元素之间的增量inc从rows+1开始 int inc = rows + 1; for (i = 1; i <= N - rows + 1; i++) //输出第rows行的元素,共有N-rows+1个 { //输出元素时,该行最后一个元素后面没有空格符 if (i < (N - rows + 1)) printf("%d ", tmp); else printf("%d", tmp); tmp += inc; //每一个元素都是前一个元素加上inc inc++; //inc++ } } int main() { int N; scanf("%d", &N); //输出N行数据 int i; for (i = 1; i <= N; i++) { printN(N, i); printf("\n"); } return 0; }
0.0分
64 人评分
#include<stdio.h> int main(void) { int n; while (scanf("%d", &n)!=EOF) { int i, j, s; int z[100][100] = { {0} }; z[0][0] = 1; for (i = 1; i < n; i++) z[0][i] = z[0][i - 1] + i + 1; s = 2 * n - 3; for (j = n - 2; j >= 0; j--)//列不变,行变化 { for (i = 1; i <= s; i++) z[i][j] = z[i - 1][j + 1] - 1; s--; } s = n; for (i = 0; i < n; i++) { for (j = 0; j < s; j++) printf("%d ", z[i][j]); s--; puts(""); } } return 0; }
为啥我这个提交之后答案错误呀,我自己测试没有错误呀 /* C算法97-蛇形矩阵 */ #include<stdio.h> int main(){ int n,i,j; int k=1,t=1,p=0; printf("请输入行数: "); scanf("%d",&n); if(n<=100){ for(i=1;i<=n;i++){//i 行 j列 t=t+i-1; //确定各行的第一个元素 k=t; for(j=1;j<=n+1-i;j++){ printf("%d\t",k); k=k+j+1+p; //确定一行中各个元素的值 } p++; printf("\n"); } } return 0; }
杜昊峰 2021-02-26 12:40:38 |
把 请输入行数 删掉
#include<stdio.h> void main() { int a,i,j,k=1; int b[100][100]={0}; while((scanf("%d",&a))!=EOF&&(a>0&&a<=100)) { b[0][0]=1; printf("%d",b[0][0]); for(i=1;i<a;i++) { b[i][0]=b[i-1][0]+i; for(j=1;j<=a-i;j++) { b[i-1][j]=b[i-1][j-1]+j+i; printf(" %d",b[i-1][j]); } printf("\n%d",b[i][0]); } } printf("\n"); } 为啥编译错哦?
#include <stdio.h> #include <stdlib.h> int main() { int num; int sum1 = 1; int sum2 = 0; scanf("%d", &num); for (int i = 0; i < num;i++) { sum1 = sum1+i; printf("%d ", sum1); sum2 = sum1; for (int j = i+2; j <= num; j++) { sum2 = sum2 + j; printf("%d ", sum2); } printf("\n"); } system("pause"); }
#include<iostream> #include<iomanip> #include<cstdio> #include<cstdlib> using namespace std; int main() { int m; scanf("%d",&m); int a[m][m]; int i = 0,j = m-1; int n = (m+1)*m/2; while(n!=0) { a[i][j] = n; n--; if(j==0) { j = i-1; i = 0; } else { i = i+1; j = j-1; } } for(int i = 0;i<m;i++) { for(int j = 0;j<m-i;j++) { if(j==0) printf("%d",a[i][j]); else printf(" %d",a[i][
#include <stdio.h> int main() { int i,j,n,x=2,y=1,num=1; while(scanf("%d",&n)!=EOF) { num=1; x=2; y=1; while(n--) { int num1=num,x1=x; for(i=0; i<=n; i++) { printf("%d ",num); num+=x; x++; } printf("\n"); num=num1+y; y++; x=x1+1; } } } 感觉我这个更简洁
【明明的随机数】 (C++代码)浏览:779 |
简单的a+b (C语言代码)浏览:520 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:530 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:624 |
简单的a+b (C语言代码)浏览:626 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:536 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:819 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:553 |
1048题解(读入回车问题)浏览:554 |
The 3n + 1 problem (C语言代码)浏览:501 |