ソース:
セクション1.2
セクション1.3
1.キューブ変換
アイデア:この問題の7つの状況では、元の画像をs1に保存し、ターゲットをs2に保存してから、次のようにメソッドをトラバースします。
1:最初の列がnから1に変わり、列が1からnに変わります
2:最初の列がnから1に変わり、行がnから1に変わります
3:最初の列が1からnに変わり、行がnから1に変更
4:最初に列がnから1に変更され、行が1からnに変更されます
。5:最初に各行の順序を逆にしてから、1または2または3を実行します
。6:s1とs2を比較します。それらが等しいかどうか
7:上記のいずれも満たされない場合
は、トラバーサルの結果を保存します。s3を入力し、使用するたびにクリアして、等しいかどうかを比較します(もちろん、6、7については判断しないでください)。
コード
#include <bits/stdc++.h>
using namespace std;
int n,i,j;
char a[11][11],b[11][11];
string s1,s2,s3="";
int main(){
ios::sync_with_stdio(false);
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
cin>>a[i][j];
s1+=a[i][j];
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
cin>>b[i][j];
s2+=b[i][j];
}
for(i=1;i<=n;i++)
for(j=n;j>=1;j--)s3+=a[j][i];
if(s3==s2){
cout<<1;
return 0;
}
s3="";
for(i=n;i>=1;i--)
for(j=n;j>=1;j--)s3+=a[i][j];
if(s3==s2){
cout<<2;
return 0;
}
s3="";
for(i=n;i>=1;i--)
for(j=1;j<=n;j++)s3+=a[j][i];
if(s3==s2){
cout<<3;
return 0;
}
s3="";
for(i=1;i<=n;i++)
for(j=n;j>=1;j--)s3+=a[i][j];
if(s3==s2){
cout<<4;
return 0;
}
s3="";
for(i=1;i<=n;i++)
for(j=1;j<=n/2;j++)swap(a[i][j],a[i][n-j+1]);
for(i=1;i<=n;i++)
for(j=n;j>=1;j--)s3+=a[j][i];
if(s3==s2){
cout<<5;
return 0;
}
s3="";
for(i=n;i>=1;i--)
for(j=n;j>=1;j--)s3+=a[i][j];
if(s3==s2){
cout<<5;
return 0;
}
s3="";
for(i=n;i>=1;i--)
for(j=1;j<=n;j++)s3+=a[j][i];
if(s3==s2){
cout<<5;
return 0;
}
if(s1==s2)cout<<6;
else cout<<7;
}
2.その番号に名前を付けます*
アイデア:電話のキーをシミュレートできるようにchar配列を作成し、mapを使用して番号が表示されるかどうかを保存し、詳細検索を実行して、辞書に名前がある場合は名前を出力し、マークしてからマーク0の場合は「NOME」を出力します。
コード
#include <bits/stdc++.h>
using namespace std;
string a,x,s;
char ch[100][100]={
"ABC","DEF","GHI","JKL","MNO","PRS","TUV","WXY"};
int l;
map<string,int>mp;
bool f;
void work(int deep){
if(deep==l){
if(mp[s]==true){
for(int i=0;i<=l-1;i++)cout<<s[i];
cout<<endl;
f=1;
}
return;
}
string t = s;
for(int i=1;i<=3;i++){
s += ch[a[deep]-'0'-2][i-1];
work(deep+1);
s=t;
}
return;
}
int main() {
ios::sync_with_stdio(false);
cin>>a;
l=a.size();
for(int i=1;i<=4617;i++){
cin>>x;
mp[x]=true;
}
work(0);
if(!f)cout<<"NONE";
}
3.回文平方数
アイデア:[1,300]を列挙し、元の数のbベースとbの2乗を表す2つの配列を作成します。関数に毎回配列を変更させます。2乗が回文の場合は、のbベースを計算します。元の数値出力(b> 10が表示された場合、出力が> = 10であるかどうかが判断され、大文字に変換されます)。少し
コーディングする
4.二重回文の数
アイデア:直接循環列挙システムを作成し、各桁を計算して回文数が> = 2であるかどうかを判断し、それを出力します。少し
コーディングする
5.ミルクを混ぜます
アイデア:構造を直接構築し、単価を並べ替えてから、nの最小値と最大量に対応する単価を取得します(この種の牛乳は供給量が非常に多いため、お金を節約するために指定された数量)、2つの最小値を差し引いた後、単価*数量をsに加算し、最後に出力します。
6.ブルペンを修理します
アイデア:牛の位置を並べ替えてから、牛を一連のセグメントのようにいくつかのセグメントに分割し(つまり、連続した牛は1つのセグメントとしてカウントされます)、隣接する2つのセグメントごとの距離を計算し、並べ替えてから、前面を置く(分割したセグメントの数(つまり、ボードの数)-ターゲットボードの数)が追加されます(<= 0の場合は追加しないでください)。
7.スキーコースのデザイン
アイデア:最低の高さ(0〜87)を列挙すると、最高の高さは最低の高さ+17になる可能性があるため、高さが最低の高さよりも高い場合は、それを低くする必要があります。最も低い高さ、それを増やします。
コード
#include<bits/stdc++.h>
using namespace std;
int n,a[10001],s,minn=INT_MAX,i,j;
int main(){
cin>>n;
for(i=1;i<=n;i++)cin>>a[i];
for(i=0;i<=83;i++){
s=0;
for(j=1;j<=n;j++){
if(a[j]<i)s+=(i-a[j])*(i-a[j]);
if(a[j]>i+17)s+=(a[j]-i-17)*(a[j]-i-17);
}
minn=min(s,minn);
}
cout<<minn;
}