本文主要是介绍洛谷P1013 [NOIP1998 提高组] 进制位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
洛谷P1013 [NOIP1998 提高组] 进制位
第一次写注释(笑)
#include<bits/stdc++.h>
using namespace std;
int n,nn;
string a[15][15];
int b[15][15],c[15][15];
int main()
{cin>>n;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>a[i][j]; //输入 nn=n-1; //进制的计算/*本题的计算中经推算 第二行输入中的字母数量即为进制数因为字母表示的是正整数如果n=5假设进制数为6那样就会出现这样的表格:+ 2 3 4 52 4 5 10 113 5 10 11 124 10 11 12 135 11 12 13 14其中0,1两个数字无法用字母表示如果出现这样的答案 会判定 “ERROR!”*/for(int i=2;i<=n;i++){for(int j=2;j<=n;j++) if(a[i][j].length()==2) b[i][1]++;b[1][i]=c[1][i]=c[i][1]=b[i][1]; } /*for(int i=2;i<=n;i++)for(int j=2;j<=n;j++)if(a[i][j].length()==2) {b[1][j]++;c[1][j]++;}*//*建立在第一段注释的基础上可以同样推断出 第一列 和 第一行 中的字母是由每一列或每一行中的两位数数量决定的 可以通过九九加法表推出 *//*for(int i=2;i<=n;i++){if(b[i][1]!=b[1][i]){cout<<"ERROR!";return 0;}}*/for(int i=2;i<=n;i++){for(int j=2;j<=n;j++){//cout<<a[i][j].length()<<" ";for(int z=0;z<=a[i][j].length()-1;z++){ b[i][j]*=10;//cout<<a[i][j].substr(z,1)<<endl;for(int ii=2;ii<=n;ii++) if(a[ii][1]==a[i][j].substr(z,1)) b[i][j]+=b[ii][1];}}//cout<<endl;}//cout<<endl<<endl<<endl;for(int i=2;i<=n;i++)for(int j=2;j<=n;j++){c[i][j]=c[i][1]+c[j][1];if(c[i][j]>nn-1){c[i][j]+=10;c[i][j]-=nn;}}/*通过九九加法表计算出来的数值可以将整个加法表自己重新推算一遍再通过将加法表与输入进行对比判断ERROR */ /*for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)cout<<b[i][j]<<" ";cout<<endl;}cout<<endl<<endl;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)cout<<c[i][j]<<" ";cout<<endl;}cout<<endl<<endl;*/for(int i=2;i<=n;i++)for(int j=2;j<=n;j++)if(b[i][j]!=c[i][j]){cout<<"ERROR!";return 0; //判断ERROR! }for(int i=2;i<=n-1;i++)cout<<a[i][1]<<"="<<b[i][1]<<" ";cout<<a[n][1]<<"="<<b[n][1]<<endl;cout<<nn;return 0;
}
这篇关于洛谷P1013 [NOIP1998 提高组] 进制位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!