学習への道のりは長く、学習ノートを書くプロセスは知識を自分自身に伝えるプロセスです。
愛だけが長く続くことができ、愛だけが世界の無常を恐れることはできません!
新年「うさぎ」のご活躍をお祈り申し上げます。
新年は皆さん、問題のブラッシュアップをお忘れなく(⊙o⊙)?
目次
愛だけが長く続くことができ、愛だけが世界の無常を恐れることはできません!
P1424 小魚の航海(改良版)
トピックの背景
トピックの説明
平日は1日250~250キロ泳ぎ、週末は休む小魚がいる(土日実施の場合)○○週から数えて○○日後、小魚は何キロ泳いだか?
入力フォーマット
2 つの正の整数 �,�x,n を入力して、週 �x から �n 日が経過したことを示します。
出力フォーマット
魚が何キロ泳いだかを示す整数を出力します。
入力サンプルと出力サンプル
#1を入力してコピーします
3 10
出力 #1コピー
2000年
指示/ヒント
データ保証、1≤�≤71≤x≤7、1≤�≤1061≤n≤106。
トピックについて:
まず、午前中に 150 キロ泳ぎ、午後に 100 キロ泳ぎ、夕方と週末に休憩する、これらの条件を 1 つにまとめることができます: 週末を除いて、毎日 250 キロ泳ぐ。(そう言うのは非常に単純明快です。)
週末だとどうしてわかるの?小魚はn週目から泳ぎ始め、泳いだ日をn+1とすると、nが6か7なら週末、6か7でなければ週末であることがわかります。週末ではなく、250 を追加する必要があります。
最後に、最も重要な点は、現在が第 7 週である場合、明日は第 8 週ではなく第 1 週になるため、n==7 の場合、n には値 1 を割り当てる必要があるということです。
コードを比較すると理解しやすいです。
A.
#include<bits/stdc++.h>
using namespace std;
int main(){
long long int x,n,m,sum=0;
int s[7]={250,250,250,250,250,0,0};
cin >> x >> n;
m=x;
for(int i=1;i<=n;i++){
sum=sum+s[m-1];
if(m==7){
m=1;
}
else{
m++;
}
}
cout << sum << endl;
}
これは非常に単純な質問ですが、非常に興味深い質問でもあります. 上のコードを見ると、配列を使用していることがわかります. この問題を解決する他の方法はありますか?答えは間違いなくイエスです!! !
B.
#include<bits/stdc++.h>
using namespace std;
int main()
{
unsigned long long n,ans=0;
int x;
cin >> x >> n; //输入星期和天数
for(int i=0;i<n;i++)
{
if((x!=6)&&(x!=7)) //星期不等于6和7
ans += 250; //总长度增加250
if(x==7) //当x等于7的时候
x=1; // x归1
else //其他情况下(x不等于7)
x++;
}
cout << ans; //输出总路程
return 0;
}
B.問題の解法は単純 な加算と減算演算を使用し、x!=6&&x!=7の場合はリストするだけで十分であることがわかりますが、A. サンプル コードは x == 6&&x=の場合に 0 の配列を使用します=7 . もちろん共通の考え方も同じで、土曜と日曜は休み、日曜なら月曜からスタート、考え方も違うし、解決方法も違うけど、みんな正解!! !
これがブラッシングの質問についてのあなたの考えを開くことができるかどうかはわかりませんか?
P1914 リトルブックボーイ――カエサル暗号
トピックの背景
とあるこんにゃくが「リトルブックボーイ」に恋をし、ある日ログイン時のパスワードを忘れてしまった(メールも携帯も紐づけていなかった)ため、ゴッベンユーに問題をぶつけてしまった。
トピックの説明
こんにゃくはパスワードを忘れてしまいましたが、パスワードが文字列で構成されていることは覚えています。パスワードは、元のテキスト文字列 (50 個以下の小文字で構成される) の各文字を �n 桁分後方に移動することによって形成されます。z
の次の文字は などです a
。今、彼は元のテキスト文字列を見つけました。移動する前に、パスワードを尋ねてください。
入力フォーマット
1 行目: �n. 2段目:移動前の文字列。
出力フォーマット
1行がこのこんにゃくの合言葉です。
入力サンプルと出力サンプル
#1を入力してコピーします
1qwe _
出力 #1コピー
rxf
指示/ヒント
文字列の長さ ≤50≤50。
A.
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,z;
string s;
cin >> n;
cin >> s;
for(int i=0;i<s.length();i++){
if(s[i]+n>'z'){
z=(s[i]+n)-'z'+96;
cout << char(z);
}
else{
cout << char(s[i]+n);
}
}
}
この質問も非常に興味深い. ASCII コード表を理解して使用する必要があります. ご存知のように、ASCII コードでは、a はに対応します.
97、質問を見て、
z=(s[i]+n)-'z'+96;
わからないけど、わかってる?
同様に、>zに遭遇したときに a に 戻ることを 試みることもできます:
B.
for(i=0;i<s.size();++i)
{
for(j=1;j<=n;++j)
{
++s[i];
if(s[i]>'z')
s[i]='a';
}
}
OKOKOKOKKKkkkk、
過去数日間、質問をブラッシングして、 「データ指向プログラミング」、「サンプルをごまかす、奇跡を激しく見つける、検索する、ハングアップしてテーブルをプレイする、1 人を救う」など、本当に多くのことを学びました。O(∩_∩) おお、わかるかな?
次のソリューションで詳しく説明できます。データ指向プログラミングとは何ですか?