非官方提供答案,只是记录一下笔者自己写的通过OJ的答案,有更好方法可一起探讨。
共4个测试用例,3个通过,1个未通过 用时极多但还是没有找到问题
#include<stdio.h> //Notes: //1.0结果 //2.首项尾项表述 //3.系数/幂次为-1或1时的结果 int main(){ int a[101]={0}; //记录幂次与幂次系数 int b=0; //记录最高次 int x=1,y; //记录输入的幂次与系数 ///输入/ while(x != 0){ scanf("%d %d",&x,&y); //输入 a[x] += y; //累加幂次系数 if(a[x] != 0 && x > b){ b = x; } }; x = 1; while(x != 0){ scanf("%d %d",&x,&y); a[x] += y; if(a[x] != 0 && x > b){ b = x; } }; ///输出// for(int i = b; i >= 0; i--){ if(i == b){ //首项 if(i == 0){ //最高项==0 printf("%d",a[i]); }else if(i == 1){ //最高项==1 if(a[i] == 1){ //&&系数==1 printf("x"); }else if(a[i] == -1){//系数==-1 printf("-x"); }else{ //&&系数!=1/-1 printf("%dx",a[i]); } }else{ //最高项>0除了1 if(a[i] == 1){ printf("x%d",i); }else if(a[i] == -1){ printf("-x%d",i); }else{ printf("%dx%d",a[i],i); } } }else if(i == 0){ //尾项 if(a[i] < 0){ //0次系数<0 printf("%d",a[i]); }else if(a[i] > 0){ //0次系数>0 printf("+%d",a[i]); } }else if(i == 1){ //次数为1的项 if(a[i] == -1){ //系数==-1 printf("-x"); }else if(a[i] < 0){ //系数<0 printf("%dx",a[i]); }else if(a[i] == 1){//系数==1 printf("+x"); }else if(a[i] > 0){ //系数>0 printf("+%dx",a[i]); } }else{ //中间项 if(a[i] == -1){ //系数==-1 printf("-x%d",i); }else if(a[i] < 0){ //系数<0 printf("%dx%d",a[i],i); }else if(a[i] == 1){//系数==1 printf("+x%d",i); }else if(a[i] > 0){ //系数>0 printf("+%dx%d",a[i],i); } } } return 0; }思路理解: 输入: 1.n–n行n列 1<= n <=100 2.n行n列矩阵 输出: 1.NO or 鞍点下标 易错点: 1.不能根据输入的n直接定义a的n行n列矩阵 2.当一个for循环完整结束后,每个循环后执行语句是执行的 eg.for(c=0; c<n; c++) 该循环结束后,c=n。 3.注意区分不同参数在当前代码所代表的含义(j&&b[i])
#include<stdio.h> int main(){ int n; scanf("%d",&n); //n行n列的n //不能直接定义为a[n] int a[100][100]={0},b[100]={0};//a[100][100]矩阵 //b[i]i行最大数的列数 int flag = 0; //判断是否有鞍点标志 int res[2]; //存储输出鞍点下标 int i,j,c; //i行j列,c行 /***输入矩阵 && 判断并存储i行最大数的列数于b[i]***/ for(i=0; i<n; i++){ for(j=0; j<n; j++){ scanf("%d",&a[i][j]); if(j == 0){ b[i] == 0; }else if(a[i][j] > a[i][b[i]]){ b[i]=j; } } } /*判断i行最大数在该列是否为最小值(与每行数值比较)*/ for(i=0; i<n; i++){ for(c=0; c<n; c++){ if(a[c][b[i]] < a[i][b[i]]){ break; } } //注意完整结束for循环后c==n if(c == n && a[c-1][b[i]] >= a[i][b[i]]){ flag = 1; //有鞍点 res[0] = i; res[1] = b[i]; //注意不能写j break; } } if(flag == 0){ printf("NO"); }else if(flag == 1){ printf("%d %d",res[0],res[1]); } return 0; }易错点: 1.注意无有效文本不应有输出
#include<stdio.h> #include<string.h> //字符串函数 int main(){ int b = 0; //字符串长度 char s[100]=""; //读入字符串 while(1){ scanf("%s",&s); if(!strlen(s))break; //当读入无字符,没有输出 else if(strrchr(s,'.')){ //当读入结尾有句号的输入 b = strlen(s) - 1; //去掉结尾句号字符长度 if(b == 0)break; //当没有有效输入时没有输出 printf("%d",b); break; } b = strlen(s); printf("%d ",b); } return 0; }