这种题目往往都是找出各个元素之间的规律。
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() { int n; scanf("%d", &n); int a[10][10]; int i, j, c; a[0][0] = 1; for (i = 0; i < n; i++) { c = i + 2; for (j = 0; j < n; j++) { printf("%d ", a[i][j]); a[i][j + 1] = a[i][j] + c; c = c + 1; if (i + j == 4) { printf("\n"); a[i + 1][0] = a[i][0] + i + 1; break; } } } }
ikun 2023-02-09 15:20:42 |
楼主您好,我觉得那个if语句中条件改为i+j==n-1通用性会更高一点,感谢大佬的思路!!
看看我的 #include<stdio.h> int main(void) { int a; scanf("%d",&a); int change = 0; for(int i = 0; i < a; i++) { int number = 0; number = change; for(int j = 0; j < a - i; j++) { number = i + j + number; printf("%d ",++number); } change = i + change; printf("\n"); } return 0; }
#include <bits/stdc++.h> using namespace std; int arr[101][101]; int main(){ int n; int num=1; cin>>n; for(int i=0;i<n;i++){ for(int j=0;j<=i;j++){ arr[i-j][j]=num; num++; } } for(int i=0;i<n;i++){ for(int j=0;j<n-i;j++){ cout<<arr[i][j]<<" "; } cout<<endl; } return 0; }
#include<stdio.h> void fun(int a,int b) { int c,d,e=1,g; g=b-1; for(d=1;d<=b-1;d++) { e=e+d; } for(c=0;c<=a-b;c++) { e=e+g; g++; 8 printf("%d ",e); } } int main() { int a,b,c,d; scanf("%d",&a); for(b=1;b<=a;b++) { fun(a,b); printf("\n"); } } 为什么我这个蛇是倒着跑的
#include<stdio.h> #include<string.h> #define m 100 int main() { int n,a[m][m],l,l1,l2,l3; n=l2=l3=l=0; l1=2; memset(a,0,sizeof(int)); scanf("%d",&n); a[0][0]=1; for(int i=1;i<n;i++) //定义第一列// { l++; a[i][0]=l+a[i-1][0]; } l3=n; for(int j=0;j<n;j++) { l2=l1+j; for(int i=1;i<l3;i++) { a[j][i]=a[j][i-1]+l2; l2++; } l3--; } for(int j=0;j<n;j++) { for(int i=0;i<n;i++) { if(a[j][i]!=0) { printf("%d ",a[j][i]); } } printf("\n"); } return 0; }
#include <iostream> using namespace std; int a[21][21]; int main() { int n,num=1,i,k,q; cin>>n; for(int i=1;i<=n;i++){ q=1; for(int k=i;k>=1;k--){ a[k][q]=num; num++; q++; } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(!a[i][j]) continue; cout<<a[i][j]<<" "; } cout<<endl; } return 0; }
#include<stdio.h> int main() { int n,a=0; scanf("%d",&n); for(int i=1;i<n+1;i++) { for(int j=i;j<n+1;j++) { a+=j; printf("%d ",a); } printf("\n"); a=((i+1)*i)/2-i; } }