vaguechatのプロフィール
- ベストアンサー数
- 47
- ベストアンサー率
- 85%
- お礼率
- 0%
- 登録日2010/02/22
- このような自然数は存在するのでしょうか?
いま、n桁の自然数、Nがここにあるとします。そのNを一の位から順番を逆に並べなおした数をMとします。このとき、MがNの約数となるような自然数は存在するのでしょうか?(例えば、N=5431ならば、M=1345です。)無限に自然数はあるので、ひとつくらいはありそうな気もしますが、どうなのでしょうか? ただし、2000、1234321、1210000、22222のような明らかに条件を満たす数は除きます。
- volatileの振る舞いが分かりません。
Javaのプログラミングを行っているのですが、volatileをつけた結果になっとくがいきません。 volatileというのは、他のスレッドによって変数の値が書き換えられる状態になるのを防ぐことができる とあるのですが、出力結果からしてそうじゃないんじゃないかと考えています。 下記のソースの実行結果がなぜそうなるのかいまいち分かっていません。 public class Thirsty { //ボトル static Bottle bottle; public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ bottle = new Bottle(2000); // ボトルから水を飲む人 class Person extends Thread { public Person(String name) { super(name); } public void run() { // 200ml飲んでみる。飲めたらtrueが返される while(true) { if(bottle.drink(10)) { System.out.println(Thread.currentThread().getName() + " did drink water "); } else { System.out.println(Thread.currentThread().getName() + " couldn't drink water "); break; } } } } Person yamada = new Person("Yamada"); Person tanaka = new Person("Tanaka"); yamada.start(); tanaka.start(); } } class Bottle { private volatile int water;// volatileを使用した場合 Bottle(int amount) { water = amount; } // ボトルにamountで指定した量だけ残っているか private boolean contains(int amount) { if(amount <= water) { return true; } else { return false; } } // ボトルの水をamountで指定した量だけ水を飲む public boolean drink(int amount) { if(contains(amount)) {//水があれば残りの量から引く 残量を出力する water -= amount; System.out.println(Thread.currentThread().getName() + " water = "+water); return true; } return false; } } 私の場合、出力結果で、最後の方には Yamada did drink water Yamada water = 0 Yamada did drink water Yamada couldn't drink water Tanaka water = 80 Tanaka did drink water Tanaka couldn't drink water となります。 途中でも waterの値がいきなり高くなったりします。 なぜこのような結果がでるのでしょうか? volatileというのはメインメモリの値を必ず参照するとあるのですが、このメインメモリというのは class Thirstyのメモリを指すのでしょうか?
- ベストアンサー
- Java
- DEADSPACE566
- 回答数4
- volatileの振る舞いが分かりません。
Javaのプログラミングを行っているのですが、volatileをつけた結果になっとくがいきません。 volatileというのは、他のスレッドによって変数の値が書き換えられる状態になるのを防ぐことができる とあるのですが、出力結果からしてそうじゃないんじゃないかと考えています。 下記のソースの実行結果がなぜそうなるのかいまいち分かっていません。 public class Thirsty { //ボトル static Bottle bottle; public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ bottle = new Bottle(2000); // ボトルから水を飲む人 class Person extends Thread { public Person(String name) { super(name); } public void run() { // 200ml飲んでみる。飲めたらtrueが返される while(true) { if(bottle.drink(10)) { System.out.println(Thread.currentThread().getName() + " did drink water "); } else { System.out.println(Thread.currentThread().getName() + " couldn't drink water "); break; } } } } Person yamada = new Person("Yamada"); Person tanaka = new Person("Tanaka"); yamada.start(); tanaka.start(); } } class Bottle { private volatile int water;// volatileを使用した場合 Bottle(int amount) { water = amount; } // ボトルにamountで指定した量だけ残っているか private boolean contains(int amount) { if(amount <= water) { return true; } else { return false; } } // ボトルの水をamountで指定した量だけ水を飲む public boolean drink(int amount) { if(contains(amount)) {//水があれば残りの量から引く 残量を出力する water -= amount; System.out.println(Thread.currentThread().getName() + " water = "+water); return true; } return false; } } 私の場合、出力結果で、最後の方には Yamada did drink water Yamada water = 0 Yamada did drink water Yamada couldn't drink water Tanaka water = 80 Tanaka did drink water Tanaka couldn't drink water となります。 途中でも waterの値がいきなり高くなったりします。 なぜこのような結果がでるのでしょうか? volatileというのはメインメモリの値を必ず参照するとあるのですが、このメインメモリというのは class Thirstyのメモリを指すのでしょうか?
- ベストアンサー
- Java
- DEADSPACE566
- 回答数4
- 待ち行列の平均滞留ジョブ数について
待ち行列の公式について質問です。 平均滞留ジョブ数は、処理中も含めて滞留しているジョブ数の平均値。 手持ちの参考書ではこう説明されています。 平均到着率(1件/秒)で、平均処理率(2件/秒)の時、利用率が0.5なので、平均滞留ジョブ数が1/(1-0.5)=2件なるのが、しっくりきません。公式を使えば問題は解けますが、1秒に2件処理出来るのだから、もっと少なそうだと感覚的に思ってしまいます。 この解になる理屈を教えて下さい。
- ベストアンサー
- その他([技術者向] コンピューター)
- ipyodora
- 回答数2
- BCCでの日本語ファイル名の扱い
こんにちは。 現在WindowsVistaで、Borland C++ Compiler 5.5(日本語版)を使い、プログラミングを行っています。 最近、bcc32.exeでソースファイルをコンパイルする際に、ソースファイルの名前に一部の日本語が含まれている場合は、コンパイルできないという事に気が付きました。 例えば、「161_ポインタの基礎.c」というソースファイルをコンパイル使用すると、以下の様にコンパイルエラーになります。 ------------------------------------------------------------ >bcc32 -c "161_ポインタの基礎.c" Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland 161_ポツンタの基礎.c: エラー F1009 161_ポツンタの基礎.c: 入力ファイル '161_ポツンタの基礎.c' をオープンできない *** 1 errors in Compile *** ------------------------------------------------------------ どうやら、「イ」という文字を、コンパイラが「ツ」と認識してしまっているようです。 こういった問題の解決策をWebで検索したのですが、見つける事ができませんでした。 ちなみに、僕の使っているBCCはすでに日本語版ですので、日本語化が必要というわけではなさそうです。 そこで解決策を御提供頂きたいと思っています。 何でもいいので、よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- MetalLover
- 回答数6