質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

2回答

4614閲覧

JAVA 演習問題 給与計算

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2020/12/02 17:53

行き詰ってます、助けてください。

あなたはアルバイトをしています。
給料は以下のルールで決まっています。

・9 時から 17 時まで : 時給 X 円 (通常の時給)
・17 時から 22 時まで : 時給 Y 円 (夜の時給)
・それ以外の時間 : 時給 Z 円 (深夜の時給)

あなたの N 日間の出勤時刻と退勤時刻が 1 時間単位で与えられます。
N 日間の合計で得られる金額を計算してください。

入力例 1 の場合、4 日間で時給 X 円、Y 円、Z 円となる時間帯を満遍なく働いており、
金額の合計は Z×9 + X×8 + Y×5 + Z×1 = 1500×9 + 1000×8 + 1300×5 + 1500×1 = 29500 円となります。
図1

入力される値
入力は以下のフォーマットで与えられます。

X Y Z
N
S_1 T_1
S_2 T_2
...
S_N T_N
・1 行目には、通常の時給 X、夜の時給 Y、深夜の時給 Z がこの順に整数で半角スペース区切りで与えられます。
・2 行目には、出勤日数 N が整数で与えられます。
・続く N 行の i 番目 (1 ≦ i ≦ N) には、i 日目の出勤時刻 S_i と退勤時刻 T_i がこの順に整数で半角スペース区切りで与えられます。
・入力は合計で N + 2 行となり、入力値最終行の末尾に改行が 1 つ入ります。

それぞれの値は文字列で標準入力から渡されます。標準入力からの値取得方法はこちらをご確認ください
期待する出力
・N 日間の給料の合計金額を整数で出力してください。
・末尾に改行を入れ、余計な文字、空行を含んではいけません。
条件
すべてのテストケースにおいて、以下の条件をみたします。

・0 ≦ X, Y, Z ≦ 3,000
・1 ≦ N ≦ 100
・0 ≦ S < T ≦ 23
入力例1
1000 1300 1500
4
0 9
9 17
17 22
22 23
出力例1
29500
入力例2
1300 1500 1700
7
8 19
9 20
10 21
11 22
0 23
20 22
0 21
出力例2
130000

int getTotal(int s, int t, auto fn){
if(!(s<t)) return 0;
return fn(s) + getTotal(s+1, t, fn);
}

int main() {
int X,Y,Z;
int N;
cin>>X>>Y>>Z;
cin>>N;

auto func = [=](int s){
if(9 <= s && s < 17){
return X;
}else if(17 <= s && s < 22){
return Y;
}
return Z;
};

int total=0;
for(int i=0; i<N; i++){
int S,T;
cin>>S>>T;
total += getTotal(S, T, func);
}
cout<<total;
return 0;
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2020/12/02 18:40

・問題の書式からして、Paizaのスキルチェックの問題と推察できますが、その問題をここに貼る、また、解法を他の人に聞くことはPaizaの利用規約違反です。 ・タグがJavaですが、コードが明らかにJavaではないです。Cでしょうか?
momon-ga

2020/12/03 01:02

javaに翻訳してくれという作業依頼ですか? ロジックは書いてあるので、できてるようなものじゃないかと
退会済みユーザー

退会済みユーザー

2020/12/03 03:06 編集

Javaにして欲しいです 答えお願いできないでしょうか?
退会済みユーザー

退会済みユーザー

2020/12/03 02:59

https://paiza.jp/guide/kiyaku (3)ブログ・SNS等の各種媒体(インターネット媒体に限られず、不特定多数が閲覧可能なものを全て含む。)上において、当社がpaizaで出題した問題の内容、当該問題に対する解答、解答へのヒント等の示唆およびカンニング等の不正を助長する内容等を掲載する行為。
dodox86

2020/12/03 03:22

既に削除されている質問者氏の前の質問で指摘したはずですが、paizaの問題です。
guest

回答2

0

解決しました、ありがとうございます

投稿2020/12/03 03:23

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ツール使うか、自分で変換してみてはどうでしょうか。
https://www.tangiblesoftwaresolutions.com/product_details/cplusplus_to_java_converter_details.html

この辺わかれば、あとは自分でなんとかできるでしょう。

C++

1cin>>N;

java

1Scanner sc = new Scanner(System.in); 2int N = sc.nextInt();

ややこしそう?なところ

java

1java.util.function.IntFunction<Integer> func = i -> { 2 if (9 <= i && i < 17) { 3 return X; 4 } else if (17 <= i && i < 22) { 5 return Y; 6 } else { 7 return Z; 8 } 9};

java

1int getTotal(int s, int t, IntFunction<Integer> fn) { 2 if (!(s < t)) return 0; 3 return fn.apply(t) + getTotal(s + 1, t, fn); 4}

まぁ、日付またぎが考慮できていないのでwrong anserっぽいですけどね。

投稿2020/12/03 01:45

momon-ga

総合スコア4826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問