【C,C++】 ちょっと問題解いて行け 【勉強】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/10/12(月) 01:16:00と言うわけで、初心者〜プロの方まで様々な人が書いたソースを見て、より良いプログラムを作れるようになろうと言う目論見です。
問題は未来アンカーで踏んだ人が空気を読んだ問題を出しましょう。
解答ソースを貼る人用テンプレ
【C言語歴】 (例)4年
【レベル】 (例)初心者、プロ、学校で習った程度 など
【コンセプト】 (例)処理速度重視、可読性重視、容量重視 など
【コメント】 (例)みっくみくにしてやんよ。など、有れば
長すぎるソースはこちらへ
ttp://codepad.org/
宿題は C/C++の宿題片付けます 130代目へ
http://pc12.2ch.net/test/read.cgi/tech/1250204272/
相談は C言語なら俺に聞け(入門篇)Part54などへ
http://pc12.2ch.net/test/read.cgi/tech/1254829314/
0002デフォルトの名無しさん
2009/10/12(月) 01:17:21【問題】 5個の数を入力すると合計と平均を計算し出力するプログラムを作成してください。
次の問題は>>50
0003デフォルトの名無しさん
2009/10/12(月) 01:20:30【レベル】 超初心者
【コンセプト】 ちゃんと動くように書くのが精一杯
【コメント】 先月からC言語を勉強しはじめました。一応講義受けてます・・。
#include<stdio.h>
#define BUF_SIZE (16)
#define COUNT (5)
int main(void){
int i;
double sum = 0;
char buf[BUF_SIZE];
printf("%d回、数を入力してください。\n",COUNT);
for(i=0;i<COUNT;i++){
fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%lf",&sum);
sum +=sum;
}
printf("合計は%f、平均は%fです。",sum,sum/COUNT);
return (0);
}
0004デフォルトの名無しさん
2009/10/12(月) 01:21:480005デフォルトの名無しさん
2009/10/12(月) 01:27:15>
0006デフォルトの名無しさん
2009/10/12(月) 03:12:570007デフォルトの名無しさん
2009/10/12(月) 05:39:25【C言語歴】 1年 【レベル】 学校で習った 【コンセプト】 普通に
#include <stdio.h>
int main(void)
{
char str[20];
int num1;
int num2;
int num3;
int num4;
int num5;
int sum;
puts( "整数を5回入力して下さい。" );
fgets( str, 20(str), stdin );
sscanf( str, "%d", &num1 );
fgets( str, 22(str), stdin );
sscanf( str, "%d", &num2 );
fgets( str, 24(str), stdin );
sscanf( str, "%d", &num3 );
fgets( str, 26(str), stdin );
sscanf( str, "%d", &num1 );
fgets( str, 28(str), stdin );
sscanf( str, "%d", &num1 );
sum = num1 + num2 + num3 + num4+ num5;
printf( "合計: %d\n", sum );
printf( "平均: %d\n", sum / 5 );
return 0;
}
これでどうですか?
0008デフォルトの名無しさん
2009/10/12(月) 07:50:45わざと()にしたのかなアセンブリじゃないんだから[]使わないとだめだよ
20[str]みたいにね、と思ったがfgets(, size_t, )だったなぁ
脳内lintには引っかかったが、脳内コンパイルできなかった
0009デフォルトの名無しさん
2009/10/12(月) 14:32:38【レベル】 超初心者
【コンセプト】 なし
【コメント】 なし
#include <stdio.h>
int main(){
int a[5];
scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4]);
int b=a[0]+a[1]+a[2]+a[3]+a[4];
printf("%d\n%g\n",b,(float)b/5);
return 0;
}
0010デフォルトの名無しさん
2009/10/12(月) 14:42:32bが宣言されてなくない?
あとその書き方だと数が多いと大変
0011デフォルトの名無しさん
2009/10/12(月) 14:43:280012デフォルトの名無しさん
2009/10/12(月) 19:45:130013デフォルトの名無しさん
2009/10/12(月) 21:52:38【C言語歴】 5〜6年
【レベル】 けど初心者
【コンセプト】 stl で書いてみた
【コメント】 プログラムがうまくなりたーい
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
int main()
{
std::vector<int> arr;
std::cout<< "整数を5回入力してね。"<<std::endl;
for( int i = 0; i < 5; ++i)
{
int input_tmp;
std::cin >> input_tmp;
arr.push_back( input_tmp );
}
int sum = std::accumulate(arr.begin(), arr.end(), 0);
std::cout << "Sum:" << sum <<std::endl;
std::cout << "Mean:"<< (double)sum/arr.size() << std::endl;
return 0;
}
・buf は for の中で宣言しても良いかも。(その方が後で改造しやすい)
・sscanf は「scanできた数」を返すから、それできちんと入力されたかチェックした方が好ましい。
※ >3だと空入力とかも1回とカウントされてしまう。
・%lfでsscanfしてるんだから、 printfも %lf で出力した方が好ましい。
>7,9
・個別に書く事は得になし。
>13
・c++なんだからキャストは static_cast の方が好ましい。
(というか出題は整数限定じゃないのだから、double型にしときゃ良い気が。)
総評:
・初期化を書くクセを突けた方が良いと思われ。
・コンパイルが通るのを確認してから書いた方が良いと思われ。
今やWindowsでもコンパイラはタダなのだし。
0015デフォルトの名無しさん
2009/10/13(火) 02:48:58これは論外。何故論外なのか判らないならprintf()とscanf()のマニュアルペー
ジを読め。
それでも判らないなら、人に物を教えようなどと言う烏滸がましいことは金輪際
止めた方がいい。
0016デフォルトの名無しさん
2009/10/13(火) 06:42:170017デフォルトの名無しさん
2009/10/13(火) 07:34:010018普通の名無しさん
2009/10/13(火) 16:10:40【C言語歴】 22年 ソースにコメントされても、多分返事は無い
【レベル】 プロ
【コンセプト】 可読性重視
【コメント】 C++ は入出力がスマートで便利
*/
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
const int MAX_COUNT = 5;
int main(void) {
double data[5];
double total = 0.0;
int i;
for(i=0; i<MAX_COUNT; i++) {
cout << "何かの数:";
cin >> data[i]; cout << data[i] <<endl;
total += data[i];
}
cout << "合計:" << total <<endl;
cout << "平均:" << total/MAX_COUNT <<endl;
}
0019別に返事は要らん
2009/10/13(火) 16:50:31一方、標準出力はバッファリングされている可能性があるからフラッシュしないと折角のプロンプト出力が無駄になる。
0020デフォルトの名無しさん
2009/10/13(火) 19:16:48・
・
・
double data[5];
さすがプロ
つーか、配列の意味無し
0021デフォルトの名無しさん
2009/10/13(火) 20:32:55ありがちなミスだなw
というお前さんも問題解いて行ってくれよ?
失敬。そしてわざわざ指摘をありがとう。(思いっきり勘違いしてますねこりゃ。)
そして>13さんごめんなさい。
>18
先輩、忘れ物です。
つ return 0;
>19
一応どのように読み取ったかを確認できるので、冗長ではあるけど意味はあるかと。
(例えば 1,2 などと入力すると…)
0023デフォルトの名無しさん
2009/10/14(水) 06:24:20#include <stdio.h>
int main(void)
{
char str[20];
int num1;
int num2;
int num3;
int num4;
int num5;
int sum;
puts( "整数を5回入力して下さい。" );
fgets( str, 20, stdin );
sscanf( str, "%d", &num1 );
fgets( str, 20, stdin );
sscanf( str, "%d", &num2 );
fgets( str, 20, stdin );
sscanf( str, "%d", &num3 );
fgets( str, 20, stdin );
sscanf( str, "%d", &num4 );
fgets( str, 20, stdin );
sscanf( str, "%d", &num5 );
sum = num1 + num2 + num3 + num4+ num5;
printf( "合計: %d\n", sum );
printf( "平均: %d\n", sum / 5 );
return 0;
}
0024デフォルトの名無しさん
2009/10/14(水) 09:33:04fgets(str, sizeof(str), stdin);
0025デフォルトの名無しさん
2009/10/14(水) 10:12:370026普通の名無しさん
2009/10/15(木) 17:35:50【C言語歴】 22年 ソースにコメントされても、返事は期待しないように
【レベル】 プロ
【コンセプト】 可読性重視
【コメント】 途中で数字以外を入れるとそこまでで計算を終わる
*/
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
const int MAX_COUNT = 5;
int main(void) {
double data, sum=0.0;
int i;
for(i=0; i<MAX_COUNT; i++) {
// cout << "何かの数:";
if(!(cin >> data)) break;
// cout << data <<endl;
sum += data;
}
cout << "合計:" << sum <<endl;
cout << "平均:" << sum/i <<endl;
}
0027普通の名無しさん
2009/10/15(木) 17:36:35【C言語歴】 22年 ソースにコメントされても、返事は期待しないように
【レベル】 プロ
【コンセプト】 可読性重視
【コメント】 途中で数字以外を入れるとそこまでで計算を終わる
*/
#include <stdio.h>
#define MAX_NUM 5
int main(){
double data, sum=0.0;
int i;
for(i=0; i<MAX_NUM; i++){
// printf("何かの数:");
if(scanf("%lf", &data ) != 1) break;
// printf("%g\n", data);
sum += data;
}
printf( "合計:%g\n", sum);
printf( "平均:%g\n", sum/i);
return 0;
}
0028デフォルトの名無しさん
2009/10/15(木) 17:54:24【C言語歴】 沢山
【レベル】 プロ
【コンセプト】 即興
【コメント】 >27に準拠、0件にも対応
*/
#include <stdio.h>
static const int MaxNum = 5;
int main()
{
double sumData = 0;
int ic;
for (ic = 0; ic < MaxNum; ++ic) {
double data;
fprintf(stderr, "Input a number:");
if (scanf("%lf", & data) != 1) break;
sumData += data;
}
if (ic) {
printf("Summation:%g\nAverage:%g\n", sumData, sumData / ic);
} else {
printf("There are no numbers.\n");
}
return 0;
}
0029デフォルトの名無しさん
2009/10/16(金) 00:02:18// 【レ ベ ル】 底辺SIerのPG
// 【コンセプト】 C++で。例外処理は省略。
// 【コメント】ベースは>18
#include <iostream>
#include <vector>
#include <numeric>
int main ( void )
{
const int MAX_COUNT = 5;
std::vector<double> buf;
std::cout << MAX_COUNT << "個の数値を入力してください。" << std::endl;
for( int count = 0; count < MAX_COUNT; ) {
double tmp = 0.0;
std::cin >> tmp;
if ( std::cin.fail() ) {
std::cin.clear(); // エラーを消す
std::cin.ignore(); // エラーとなった文字を読み飛ばす
}
else {
buf.push_back( tmp );
++count;
}
}
double sum = std::accumulate( buf.begin(), buf.end() , 0.0);
std::cout << "合計:" << sum << std::endl;
std::cout << "平均:" << (sum / MAX_COUNT) << std::endl;
return 0;
}
0030デフォルトの名無しさん
2009/10/16(金) 09:53:420031デフォルトの名無しさん
2009/10/18(日) 18:22:00ゆ っ く り と い て い っ て ね
0032デフォルトの名無しさん
2009/10/18(日) 21:44:24カッコつけんなボケ
0033デフォルトの名無しさん
2009/10/19(月) 10:02:180034デフォルトの名無しさん
2009/10/19(月) 17:18:010035デフォルトの名無しさん
2009/10/19(月) 21:35:57【問題】 100個の数字をランダムに並べ替えて出力するプログラムを作成してください。
※同じ数は出力しない。毎回違った実行結果を表示する。
アルゴニズムと処理の違いが楽しみです。
次の問題は 一応50レス先の >>85
スレが停滞したらまたその時。。
0036デフォルトの名無しさん
2009/10/19(月) 21:45:20問題訂正・・。
【問題】 1〜100までの数字をランダムに並べ替えて出力するプログラムを作成してください。
※同じ数は出力しない。毎回違った実行結果を表示する。
0037デフォルトの名無しさん
2009/10/19(月) 21:53:52#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
time_t t;
t = time(0);
srandom(t);
int a[100];
for (int i = 0; i < 100; ++i) a[i] = i;
for (int i = 0; i < 100; ++i) {
int k = i + random() % (100 - i);
printf("%d\n", 1 + a[k]);
a[k] = a[i];
}
return 0;
}
C99ってことで
003837
2009/10/19(月) 21:58:41random()の剰余で求める範囲の値を取り出すのは、ほんとはよい習慣ではない。
割り算を使うほうがいい。
003937
2009/10/19(月) 22:00:23【C言語歴】 かなり長い
【レベル】 プロ
【コンセプト】 KISS
【コメント】 たたき台ってことで、よろしく。
0040デフォルトの名無しさん
2009/10/19(月) 22:27:31#include<stdlib.h>
#include<time.h>
#define MIN (1)
#define MAX (100)
#define LENGTH (MAX - MIN + 1)
int main()
{
int data[LENGTH];
// データの初期化
for(int i = MIN; i <= MAX; i++)
{
data[i - MIN] = i;
}
// データの並べ替え
srand(time(NULL));
for(int i = 0; i < LENGTH; i++)
{
int temp;
temp = data[i];
int selected_index = rand() % (MAX - i) + i;
data[i] = data[selected_index];
data[selected_index] = temp;
}
// 出力
for(int i = 0; i < LENGTH; i++)
{
printf("%d\n", data[i]);
}
return 0;
}
0041デフォルトの名無しさん
2009/10/19(月) 22:28:29はえー・・・・
さすがプロ・・。
問題作った言い出しっぺが作れてません。
コンパイル通るのに動かないょ。
004240
2009/10/19(月) 22:32:14【レベル】 Cは初級
【コンセプト】 変化を考慮
【コメント】 書き方などご指摘がありましたらよろしくお願いします。
0043デフォルトの名無しさん
2009/10/19(月) 23:20:43#include <stdio.h>
#include <string.h>
#include <time.h>
void main(){
char map[100];
time_t timer;
int a, b, p, q, i = 0;
memset(map, 0x02, sizeof(map)); time(&timer);
a=timer%100000; p=(timer/7)%1000; q=(timer/3)%1000;
while(1){
a=(((a*p+q)/10)%100000); b=a/1000;
if(0<map[b]){
printf("%3d ",b); map[b]--; i++;
}else{
while(1){
if(b<99) b++;
else b = 0;
if(0<map[b]){
printf("%3d ", b); map[b]--; i++; break;
}
}
}
if(i>=200) break;
}
}
0044デフォルトの名無しさん
2009/10/19(月) 23:23:36【コメント】 先月からC言語を勉強しはじめました。無限ループから抜け出せない。。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUM (100)
int main (void){
int rnd[MAX_NUM] = {0};
int i, j, temp;
MORE:
for(i = 0; i < MAX_NUM; ){
temp = 0;
srand((unsigned)time(NULL));
temp = rand () % MAX_NUM;
if (0 < temp && temp < MAX_NUM){
for (j = 0; j = i; j++){
if (rnd[j] != temp){
rnd[i] = temp;
i++;
}else
goto MORE;
}
}else
goto MORE;
}
for ( i = 0; i <= MAX_NUM - 1 ; i++){
printf ("%d\n", rnd[i]);
}
return (0);
}
004543
2009/10/19(月) 23:25:35memsetは1でi>=100でbreak
これだと発生しにくい数が出るけど…
0046デフォルトの名無しさん
2009/10/19(月) 23:36:03目から鱗が・・。
コンパイル通りませんでしたが。
コピペだからでしょうか。
そのアルゴいただきます。
これは良いお手本。
>40
レベル考えりゃ上出来。叩き台にはむしろこちらが相応しい。
敢えてツッコミ入れるなら、
・稀に「1と1を交換」のような、無駄な操作が発生する辺りは要改善かも。
・並べ替えの部分は↓を先頭に持ってきて、swap処理を固めた方が好ましいかと。
int selected_index = rand() % (MAX - i) + i;
・if(i>=100) break; は while の条件に書けば良いような。(効率気にするならdo〜while)
・1で初期化し-1するより、0で初期化し、1代入の方が良い気が。
(「配列全体を0で初期化」なら char map[100] = {0}; のように書けるので。)
・アルゴリズムは中々凝ってるような。(一部良く分からないけど…)
>44
・まづはgoto使うのを止めれ。ループとかブロック脱出に使うのは絶対ダメ。
・else ケースに括弧を付けるべき。括弧の対応が分かり辛く、フローも追い難い。
ちなみに無限ループに陥るのは、i がMOREにジャンプする度リセットされるから。
かつ内側のforループ内でほぼ確実にMOREにジャンプする。
0049デフォルトの名無しさん
2009/10/21(水) 05:29:420050デフォルトの名無しさん
2009/10/21(水) 06:10:06>> srand(time(NULL));
>> for(int i = 0; i < LENGTH; i++)
>> >40
>> ・稀に「1と1を交換」のような、無駄な操作が発生する辺りは要改善かも。
for(int i = 0; i < LENGTH-1; i++)
それだけでは不足。
selected_index の範囲も要修正。
>46
>コンパイル通りませんでしたが。
c99対応のコンパイラ(gccなど)が必要。
0052デフォルトの名無しさん
2009/10/22(木) 00:59:050053デフォルトの名無しさん
2009/10/22(木) 10:49:43何を?
0054デフォルトの名無しさん
2009/10/22(木) 11:09:170055デフォルトの名無しさん
2009/10/22(木) 11:17:13どっちを?
0056デフォルトの名無しさん
2009/10/22(木) 11:23:140057デフォルトの名無しさん
2009/10/23(金) 00:54:03>int selected_index = rand() % (MAX - i) + i;
selected_index ⇒ i 〜 MAX-1
0058デフォルトの名無しさん
2009/10/23(金) 01:49:52int selected_index = rand() % (LENGTH - i) + i;
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9999.c
005958
2009/10/24(土) 13:54:06http://pc12.2ch.net/test/read.cgi/tech/1255709298/229
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i, k, n, *p, temp;
srand(time(0));
scanf("%d", &n);
p = malloc(n * sizeof(int));
if(!p) return 1;
for(i=0; i<n; i++) {
p[i] = i;
k = rand() % (i + 1);
temp = p[i]; p[i] = p[k]; p[k] = temp;
}
printf("[");
for(i=0; i<n; i++) printf(" %d", p[i]);
printf(" ]\n");
free(p);
return 0;
}
0060>>1
2009/11/08(日) 09:10:38【問題】 10進数を入力して2進数を表示する。
※入力は1回のみで、繰返しはしない。数字以外は入力しない。
※正数は先頭の0は表示しない。負数は32ビットを表示する、間に空白などは埋めない。
※入力にE又は小数点がある場合、浮動小数点数は32ビットで考える。
次の問題は 40 レス先の >>100
0061デフォルトの名無しさん
2009/11/08(日) 10:47:38#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void dmp(unsigned char *b, int len)
{
int i;
for(i = len; --i >= 0; ){
int j;
/* printf(" %02x ", b[i]); */
for(j = 256; (j >>= 1) > 0; ){
printf("%d", (b[i] & j) ? 1 : 0);
}
}
printf("\n");
}
0062デフォルトの名無しさん
2009/11/08(日) 10:49:27{
char buf[4096];
int i, f;
printf("input: (123, 0.5, 3.4e-6, etc...) > ");
fgets(buf, sizeof(buf), stdin);
printf(buf);
f = 0;
for(i = 0; i < strlen(buf); i++){
char c = buf[i];
if((c == '.') || (c == 'E') || (c == 'e')){
f = 1;
break;
}
}
if(f){
double d;
sscanf(buf, "%lf", &d);
printf("%.16f\n", d);
dmp((unsigned char *)&d, sizeof(d) / sizeof(char));
}else{
sscanf(buf, "%d", &i);
printf("%d\n", i);
dmp((unsigned char *)&i, sizeof(i) / sizeof(char));
}
return 0;
}
0063デフォルトの名無しさん
2009/11/08(日) 11:27:06リトルエンディアンとビックリエンディアンの判別くらいしないといけないね
>>60
ここの人か
http://pc12.2ch.net/test/read.cgi/tech/1256818218/442
006460
2009/11/08(日) 16:10:15リトルエンディアンとビックリエンディアンの判別くらいしないといけないね
C++ でコンパイルしてください。ビックリ→ビッグ。ワーニング→ウォーニング
bool is_little_endian(unsigned char *b)
{
return b[0] ? true : false;
}
void dmp(unsigned char *b, int len, bool fill)
{
int i, j; bool zero = false;
if(i=1, is_little_endian( (unsigned char *)&i )){
for(i = len; --i >= 0; )
for(j = 256; (j >>= 1) > 0; ) {
if(b[i] & j) zero = true;
if(fill || zero) printf("%d", (b[i] & j) ? 1 : 0);
}
} else {
for(i = -1; ++i < len; )
for(j = 256; (j >>= 1) > 0; ) {
if(b[i] & j) zero = true;
if(fill || zero) printf("%d", (b[i] & j) ? 1 : 0);
}
}
printf("\n");
}
0065デフォルトの名無しさん
2009/11/09(月) 14:52:05> ※入力にE又は小数点がある場合、浮動小数点数は32ビットで考える。
整数はなんとなくわかるが、浮動小数点数の仕様がわからない。
具体例をあげてくれ。
0.0 =>
1.0 =>
0.1 =>
1E2 =>
1E-1 =>
ところで、回答してるやつはちゃんとテストしている?
0 => 0
1 => 1
-1 => 11111111111111111111111111111111 (1が32個)
65535 => 11111111111111 (1が16個)
-65536 => 111111111111110000000000000000 (1が16個と0が16個)
2147483647 => 1111111111111111111111111111111 (1が31個)
-2147483648 => 10000000000000000000000000000000 (1が1個、0が31個)
特にエンディアンがどうこう言ってるやつは、リトルエンディアンとビッグエンディアンの両方でテストしている?
0066デフォルトの名無しさん
2009/11/10(火) 15:56:340
00000000000000000000000000000000
0
0000000000000000000000000000000000000000000000000000000000000000
input: (123, 0.5, 3.4e-6, etc...) > 1.0
1
00111111100000000000000000000000
1
0011111111110000000000000000000000000000000000000000000000000000
input: (123, 0.5, 3.4e-6, etc...) > 0.1
0.1000000014901161
00111101110011001100110011001101
0.1
0011111110111001100110011001100110011001100110011001100110011010
input: (123, 0.5, 3.4e-6, etc...) > 1E2
100
01000010110010000000000000000000
100
0100000001011001000000000000000000000000000000000000000000000000
input: (123, 0.5, 3.4e-6, etc...) > 1E-1
0.1000000014901161
00111101110011001100110011001101
0.1
0011111110111001100110011001100110011001100110011001100110011010
0067デフォルトの名無しさん
2009/11/10(火) 16:18:26>【問題】 10進数を入力して2進数を表示する。
題意にそえば、10進数の0.5は2進数では0.1になるはずだが。
0.75(decimal)ならば0.11(binary)
0068デフォルトの名無しさん
2009/11/10(火) 20:00:570069デフォルトの名無しさん
2009/11/10(火) 23:00:40それはただの少数であって浮動小数点数ではないから題意に添わない
0070デフォルトの名無しさん
2009/11/10(火) 23:25:18ttp://ja.wikipedia.org/wiki/IEEE_754
0071デフォルトの名無しさん
2009/11/10(火) 23:31:45しったか乙
0072デフォルトの名無しさん
2009/11/11(水) 01:56:45基の問題文は、浮動小数点数と明記していないから、67のような捉え方もできると思う。
もっとも、その後の※を読めば浮動小数点数なのだろうとは考えられるけど。
0073デフォルトの名無しさん
2009/11/23(月) 00:53:290074デフォルトの名無しさん
2009/12/06(日) 07:57:49どのようにすればいいですか。
文字列 タブ文字1個 数値
・・・・・・・・・・ ・・
・・・・・ ・・
[参考]文字列は可変長です、文字列にタブは含みません。
数値範囲は32ビットunsigned intの整数です。
課題の要点ではないので、ソートはqsort等ライブラリを使用して下さい。
速度の為、malloc, newを使うなら、1024個を1回にとか、まとめてして下さい。
007574
2009/12/06(日) 07:59:40007674
2009/12/06(日) 12:08:24文字列の長さは固定長の間違いでした。
0077デフォルトの名無しさん
2009/12/06(日) 13:00:12そんなら OS で用意されている sort 使うよw
※"文字列は可変長"でも sort 使うが
0078デフォルトの名無しさん
2009/12/06(日) 13:53:380079デフォルトの名無しさん
2009/12/26(土) 08:34:04入力:標準ストリーム(テキストファイル)
1行目 1枚の金額 "," 発売総枚数
2行目以降 順位 "," 当選金額 "," 当選本数
最終行 改行
出力:標準ストリーム
タイトル行
入力データ、各行毎の期待値
合計期待値、還元率
ヒント:当選確率*当選金額=期待値(予想配当額)
期待値/1枚の金額=還元率
CUI/GUIどちらでも可
次スレは>>100あたり
0080デフォルトの名無しさん
2009/12/26(土) 10:00:24売れ残った部分に当りくじがあったら
還元率は大幅に下がるんじゃね?
0081デフォルトの名無しさん
2009/12/26(土) 10:13:23あなた、いつ議員に「当選」したんだ?
0082デフォルトの名無しさん
2010/02/19(金) 15:50:26[2] 問題文(含コード&リンク):
一次方程式y=a*x+bにおいて、A[x1,y1]とB[x2,y2]が与えられた時、
方程式の係数a,bを求めよ。
x1 y1: 450 454.4
x2 y2: 452 454.8
y=0.2*x+364.4
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (Visual C++)
[3.3] 言語: (C++/CLI C/Win32API C++/MFC いづれか)
[4] 期限: ( なし )
[5] その他の制限: ( GUIまたはgetc()で終わること)
0083デフォルトの名無しさん
2010/02/20(土) 15:41:01宿題はスレ違い
0084デフォルトの名無しさん
2010/02/28(日) 08:23:12#define MAXSIZE 20
typedef double WORD;
main(){
WORD (*b)[100];
WORD *a[2];
int i=1,j=1;
b = malloc(sizeof(WORD)*MAXSIZE*2);
a[0] = malloc(sizeof(WORD)*MAXSIZE);
a[1] = malloc(sizeof(WORD)*MAXSIZE);
b[i][j] = 0;
a[i][j] = 0;
/* [と]を使わない方法は?*/
b[i][j] = 0;
a[i][j] = 0;
}
0085デフォルトの名無しさん
2010/02/28(日) 17:47:41b??(i??)??(j??) = 0;
a??(i??)??(j??) = 0;
0086デフォルトの名無しさん
2010/02/28(日) 19:14:14a<:i:><:j:> = 0;
0087デフォルトの名無しさん
2010/03/03(水) 03:08:44すげー、ほんとにコンパイル通る。
それなんて名前なの?記号だけなのでググりようがない。
0088デフォルトの名無しさん
2010/03/03(水) 22:31:160089デフォルトの名無しさん
2010/03/04(木) 09:47:49*(*(b + i) + j) = 0;
*(*(a + i) + j) = 0;
0090デフォルトの名無しさん
2010/03/04(木) 20:52:47ダイグラフ
0092デフォルトの名無しさん
2010/03/07(日) 02:46:41とんくす
日本語じゃ情報少ないのな。英語だとWikipediaにのってるが
009384
2010/03/07(日) 08:18:53× トリグラフ
○ トライグラフ
http://dic.yahoo.co.jp/dsearch?p=trigraph&dtype=1
0094デフォルトの名無しさん
2010/03/22(月) 09:38:47作業用フォルダの所は空白、ソースと同じフォルダにショートカットは有ります。
ショートカット「Visual Studio 2005」
から cl xxx.cpp するのが面倒な場合はどのようにするのでしょうか。
PATHをずらっと並べるのは無しで.batのみで可能でしょうか?
0095デフォルトの名無しさん
2010/03/23(火) 01:04:08まず、ここは質問スレじゃない。
さらに、それはC/C++の問題ではない。
0096デフォルトの名無しさん
2010/03/23(火) 10:09:52>>95 返信サンキュこちらで聞いてきます。
0097デフォルトの名無しさん
2010/03/27(土) 21:58:00【C++言語歴】 15時間
【レベル】 超ド素人
【コンセプト】 えっ・・と・・・
【コメント】 参照?ポインタ?構造体?クラス?イミフ
#include <iostream>
using namespace std;
int main() {
double a, b, c, d, e, sum;
cout << "5つの数の合計と平均値を出力します。" << endl;
cin >> a >> b >> c >> d >> e;
sum = a + b + c + d + e;
cout << "合計は" << sum << "で、平均は" << sum/5 << "です。" << endl;
}
0098デフォルトの名無しさん
2010/03/28(日) 08:36:40【レベル】 プロ
#include <iostream>
using namespace std;
struct Average {
int count;
double total;
Average() : count(0), total(0.0) {}
};
int main(){
Average a;
double data;
for(int i=0; i<5; i++){
cout << "Input Number:";
cin >> data;
a.total += data;
a.count++;
}
cout << "total=" << a.total << endl;
cout << "average=" << a.total/a.count << endl;
}
0099デフォルトの名無しさん
2010/03/28(日) 17:21:220100デフォルトの名無しさん
2010/03/29(月) 10:53:12点A、点B、点Cがあり、点Aと点C、点Cと点Bがそれぞれ線分ac、線分bcで結ばれている。
点A、点Bの座標(Pa(xa, ya), Pb(xb, yb))と線分の長さ(Lac, Lbc)が与えられたとき、点Cの座標を求めよ。
但し、解は一つとは限らない。
また、与えられた座標または長さが不適切で求められない場合はそれと判るようにすること。
# 作図的には点A、点Bからそれぞれ半径Lac、Lbcの円を書いて交点を求めればいいが……
0101デフォルトの名無しさん
2010/03/29(月) 15:59:040102デフォルトの名無しさん
2010/03/29(月) 16:14:250103デフォルトの名無しさん
2010/03/29(月) 16:41:57それじゃ、次の制約でどうぞ。
・ya == yb, Lac == Lbc
>>102
非ユークリッド平面だと私自身がついていけないからパスw
0104デフォルトの名無しさん
2010/03/29(月) 16:45:450105デフォルトの名無しさん
2010/03/29(月) 18:16:540106デフォルトの名無しさん
2010/03/30(火) 01:39:29計算するとわりと簡単?
0107デフォルトの名無しさん
2010/03/30(火) 14:41:15むしろ座標系を回転して >>103 が正解(ry
0108デフォルトの名無しさん
2010/04/13(火) 22:08:11for(i=0; i<MAX_NUM; i++){
// printf("何かの数:");
if(scanf("%lf", &data ) != 1) break; ←この文
// printf("%g\n", data);
sum += data;
}
ifの中身がよくわからんないんだけどどうなってんの?
0109デフォルトの名無しさん
2010/04/14(水) 00:10:05if(!(scanf("%lf", &data))) break;
は
if(!(scanf("%lf", &data))!=0) break;
と変形した後に
if(scanf("%lf", &data)==0) break;
と変形するのが正しい
※論理否定は必ず否定が掛かっている方の真偽を逆にする
と言っても、cinの定義なんか覚えてないから
単純に戻り値をscanf()に置き換えて良いかは知らんので
そこら変は他の人にまかせる
0110109
2010/04/14(水) 00:15:40って書いたけど、何か違うな…
正確には、偽で比較するって言うか、真で比較しては駄目っての言うのが正しいのか?
0111デフォルトの名無しさん
2010/04/14(水) 00:20:390112デフォルトの名無しさん
2010/04/14(水) 00:27:56ごめんよくわかんない
>>111
if文の()の中身の
scanf("%lf", &data ) != 1
ってどういうこと?って意味
0113デフォルトの名無しさん
2010/04/14(水) 00:46:00scanfの戻り値が1でない場合真
int scanf(const char* format, ...);
scanfの戻り値は"formatで指定された型に従って代入に成功した要素数"
scanf("%lf", &data )
↑でdataに代入成功すれば1が返る 失敗すれば多分0(scanfなんて使わないから分からない)
0114デフォルトの名無しさん
2010/04/14(水) 00:57:19今回の要素数は1個なので>>118のように変形しても大丈夫だが
2以上の数値が変える場合、変形には気をつけないとね
NG例
!(2) != 0
両辺に論理否定をかけて
!(!(2)) != !(0)
左辺の二回の論理否定を打ち消すと
2 != !(1)
さらに変形すると
2 != 1
真になってしまう
OK例
!(2) != 0
両辺に論理否定をかけて
!(!(2)) != !(0)
変形すると
!(0) != 1
さらに変形すると
1 != 1
よって偽になる(これが正解)
0115114
2010/04/14(水) 01:00:30まあ、こんな感じで、ミスを避けるために、
数値の真偽を問う場合は、必ずfalse(0)と比較するってのが良く使われる。
0116デフォルトの名無しさん
2010/04/14(水) 01:17:26答えの数までは簡単に出せるが、その先が思いつかん…
何か、結構単純な解き方になる気もするのだが…
Lab = sqrt( fabs( pow( xa - xb, 2.0 ) + pow( ya - yb, 2.0 ) ) )
ans = 0;
if( ( Lac + Lbc == Lab ) || ( Lab == fabs( Lac - Lbc ) ) ) ans = 1;
if( ( Lac + Lbc < Lab ) && ( Lab < fabs( Lac - Lbc ) ) ) ans = 2;
0117デフォルトの名無しさん
2010/04/15(木) 00:11:52正解かどうかも分からんし考えながら起こしたのでもの凄い汚い点に注意。
double Len_AB, Len_AC, Len_BC;
double Pnt_XA, Pnt_XB, Pnt_XC1, Pnt_XC2, Pnt_YA, Pnt_YB, Pnt_YC1, Pnt_YC2;
double angle;
double Pnt_XB1, Pnt_YB1;
/*
入力部分は面倒なんで省略
値が入力されるのはLen_AC, Len_BC, Pnt_XA, Pnt_YA, Pnt_XB, Pnt_YB
Aを(0,0)に移動するとBの座標が変化する
Bの新座標は元の座標からAの座標を引けば良いので
*/
Pnt_XB1 = Pnt_XB - Pnt_XA;
Pnt_YB1 = Pnt_YB - Pnt_YA;
/*
(0,0)に移動後のAを中心にBを回転させ、Bの座標を(0,X)にする
回転させる角度は正接から出せる(tanX=Pnt_YB1/Pnt_XB1)
ついでにABの長さ(Len_AB)も出しておく
*/
angle = atan(Pnt_YB1/Pnt_XB1);
Len_AB = sqrt(pow(Pnt_XB1, 2) + pow(Pnt_YB1, 2));
/*
回転後のBのX座標は長さそのもの
*/
Pnt_XB1 = Len_AB;
0118デフォルトの名無しさん
2010/04/15(木) 00:15:16sqrt,pow,sin,cos,atan等使ったこと無いので何か使い方間違ってるかも
/*
Cの座標を(a,b)と仮定すると、三平方の定理から
a^2 + b^2 = Len_AC^2
また、CからX軸に垂線を下ろして、交差したところをpとすると、
pの座標は(a,0)になり、更に
(Len_AB - a)^2 + b^2 = Len_BC^2
になるので、この連立式を解く
a^2 + b^2 = Len_AC^2
Len_AB^2 - ( 2 * Len_AB * a ) + a^2 + b^2 = Len_BC^2
上の式から下の式を引くと
-Len_AB^2 + ( 2 * Len_AB * a ) = Len_AC^2 - Len_BC^2
2 * Len_AC * a = Len_AC^2 - Len_BC^2 + Len_AB^2
a = ( Len_AC^2 - Len_BC^2 + Len_AC^2 ) / 2 * Len_AC
となる
*/
Pnt_XC = ( Len_AC^2 - Len_BC^2 + Len_AC^2 ) / 2 * Len_AC;
/*
CのX座標が分かったので、後は三平方の定理からCのY座標を出せる
Len_AB^2 = Pnt_XC^2 + Pnt_YC^2
*/
Pnt_YC1 = sqrt(pow(Len_AB, 2) - pow(Pnt_XC, 2));
0119デフォルトの名無しさん
2010/04/15(木) 00:17:42数学なんざやるの久々だから正しい保証はない
/*
CのY座標は負値もある
*/
Pnt_YC2 = Pnt_YC1 * -1;
/*
CのXY座標が分かったので、回転させて戻す
*/
Pnt_YC1 = Len_AB * sin(angle) + Len_BC * cos(angle) + Pnt_YA;
Pnt_XC1 = Len_AB * cos(angle) - Len_BC * sin(angle) + Pnt_XA;
Pnt_YC2 = Len_AB * sin(angle) - Len_BC * cos(angle) + Pnt_YA;
Pnt_XC2 = Len_AB * cos(angle) + Len_BC * sin(angle) + Pnt_XA;
0120デフォルトの名無しさん
2010/04/15(木) 02:00:40h*h = Lac*Lac - Xd*(Xd + 2*Xa) - Xa*Xa - Yd*(Yd + 2*Ya) - Ya*Ya
かつ
h*h = Lbc*Lbc - Xd*(Xd + 2*Xb) - Xb*Xb - Yd*(Yd + 2*Yb) - Yb*Yb
ここでXn = Xa - Xb、Yn = Ya - Ybとすると
a,b,dは同じ直線上にあるので、あるkに対して
Xd = Xa + k*Xn、Yd = Ya + k*Xn
が成立する
以上から変数k以外しか含まない2次方程式ができるから、解いたらkが求まる。
(kが求まらないときは三角形になっていない)
kがわかれば、dの位置が確定するから、adとcdが直角(=内積が0)、bdとcdが直角
で連立して解けばいいじゃないって… どこがプログラミングの問題だよw
0121デフォルトの名無しさん
2010/04/15(木) 02:02:15×Yd = Ya + k*Xn ○Yd = Ya + k*Yn
0122デフォルトの名無しさん
2010/04/15(木) 02:09:26でadと直角な単位ベクトルにhと-hをかけて二つ答えだしておしまいだ。
0123デフォルトの名無しさん
2010/04/15(木) 22:23:40サンクス
数字だと1をかえしてそれ以外だと0かえして
ブレイクしてやんお!
ってことだよねと、わかったかんじだ
0124デフォルトの名無しさん
2010/04/15(木) 23:48:04ヘロンの公式で面積Sを求めて、底辺を辺Labとする高さh(座標yc)を求め
その高さと、辺Lac、辺Lbcのどちらかと、三平方の定理で座標yxcを求めて終わり
ただ>>100の条件では、やっぱり分からんわ…
double Lab, Lac, Lbc, xa, ya, xb, yb, xc, yc1, yc2, s, S, h, w;
// xa = xxx, ya = xxx, xb = xxx, yb = xxx, Lac = xxx, Lbc = xxx;
// → 解が2点となるような点であること
Lab = fabs( xa - xb );
// ヘロンの公式から三角形ABCの面積Sを求める
s = ( Lab + Lac + Lbc ) / 2;
S = sqrt( s * ( s - Lab ) * ( s - Lac ) * ( s - Lbc ) );
// → Sの計算でエラーが発生した場合解なし
// → 解が一つの場合の処理も省略しているので、解無しの処理も省略
// 面積Sから辺Labを底辺とした三角形の高さhを求める
h = S / Lab * 2;
// 三角形ABCの高さhから、座標 yc1, yc2 を求める
yc1 = ya + h;
yc2 = ya - h;
// 三角形ABCの頂点Cから垂直に降ろした点をOとする(線分COは高さhに等しい)
// 三角形ACOの垂辺CO(高さh)と斜辺Lacから底辺AOの長さwを求める
w = sqrt( pow( Lac, 2.0 ) - pow( h, 2.0 ) );
// 三角形ACOの底辺AOの長さwから座標xcを求める
// → 点A、点B、点Oの位置関係からxaに対して加算するのか減算するのかを決定
xc = xa + ( xa > xb ? 1 : - 1 ) * ( Lac < Lab ? 1 : -1 ) * w;
0125デフォルトの名無しさん
2010/04/15(木) 23:53:110126124
2010/04/16(金) 00:04:59> xc = xa + ( xa > xb ? 1 : - 1 ) * ( Lac < Lab ? 1 : -1 ) * w;
最後間違えてるな…
// → 点A、点B、点Oの位置関係からxaに対して加算するのか減算するのかを決定
xc = xa + ( xa > xb ? 1 : - 1 ) * ( pow( Lac, 2.0 ) < ( pow( Lab, 2.0 ) + pow( h, 2.0 ) ) ? 1 : -1 ) * w;
0127デフォルトの名無しさん
2010/04/24(土) 01:34:54それに問題複数あった方がつまらない問題無視できるからいいと思う。
0128デフォルトの名無しさん
2010/04/24(土) 01:38:20現在時刻をアスキーアートで表示せよ
【表示例】
●●○○○●○○○○○○●○●○○●●
○○●○●○●○○●○○●○●○●○○
○●●○●○●○○○○○●●●○●●●
●○○○●○●○○●○○○○●○●○●
●●●○○●○○○○○○○○●○●●●
【難易度】
40分で初級
0129デフォルトの名無しさん
2010/04/24(土) 01:44:05こんな感じの問題名、解答時間、難易度つきテンプレ希望
0130デフォルトの名無しさん
2010/04/24(土) 09:17:18http://codepad.org/E9sGRiit
ローカルでの実行結果。
○●○○●●●○○○○○○●○○○●●
●○●○●○●○○●○○●●○○●○○
●○●○●●●○○○○○○●○○●●●
●○●○○○●○○●○○○●○○●○●
○●○○●●○○○○○○●●●○●●●
0131デフォルトの名無しさん
2010/04/24(土) 09:37:15所要時間: 25分
感想: 文字盤を作るのが面倒…orz
問題の品質: △(文字盤を作るのがメインになってしまうので…)
#include <stdio.h>
#include <time.h>
#define artrow 5
#define artcol 7
int main() {
int i, j, idx[artrow]; time_t timer; struct tm *t_st;
char art[][artrow][artcol] = {
{ "○●○", "●○●", "●○●", "●○●", "○●○", },
{ "○○●", "○○●", "○○●", "○○●", "○○●", },
{ "●●○", "○○●", "○●●", "●○○", "●●●", },
{ "●●○", "○○●", "●●○", "○○●", "●●○", },
{ "●○●", "●○●", "●●●", "○○●", "○○●", },
{ "●●●", "●○○", "●●●", "○○●", "●●○", },
{ "○●●", "●○○", "●●●", "●○●", "●●●", },
{ "●●●", "○○●", "○○●", "○●○", "●○○", },
{ "●●●", "●○●", "●●●", "●○●", "●●●", },
{ "●●●", "●○●", "●●●", "○○●", "●●○", },
{ "○○○", "○●○", "○○○", "○●○", "○○○", },
};
time(&timer); t_st = localtime(&timer);
idx[0] = t_st->tm_hour / 10; idx[1] = t_st->tm_hour % 10; idx[2] = 10;
idx[3] = t_st->tm_min /10 ; idx[4] = t_st->tm_min % 10;
for( i=0; i<artrow; i++ ) for( j=0; j<5; j++ )
printf( "%s%s", art[idx[j]][i], j == 4 ? "\n" : "○" );
return 0;
}
0132デフォルトの名無しさん
2010/04/24(土) 09:46:00スペースに置き換えてください
ずれないように注意出来たら二段
0133130
2010/04/24(土) 10:10:140134131
2010/04/24(土) 11:20:02#include <stdio.h>
#include <time.h>
#define FIELD_ROW_SIZE 5
#define FIELD_COL_SIZE 5
#define ART_KIND_COUNT 11
#define COLON_IDX 10
int main() {
int row, idx, cols[FIELD_COL_SIZE];
time_t timer;
struct tm *t_st;
char *art_ptr[FIELD_ROW_SIZE][ART_KIND_COUNT] = {
{ "○●○", "○●○", "●●○", "●●○", "●○●", "●●●", "○●●", "●●●", "●●●", "●●●", "○○○" },
{ "●○●", "●●○", "○○●", "○○●", "●○●", "●○○", "●○○", "●○●", "●○●", "●○●", "○●○" },
{ "●○●", "○●○", "○●●", "●●○", "●●●", "●●○", "●●●", "○○●", "○●○", "●●●", "○○○" },
{ "●○●", "○●○", "●○○", "○○●", "○○●", "○○●", "●○●", "○○●", "●○●", "○○●", "○●○" },
{ "○●○", "●●●", "●●●", "●●○", "○○●", "●●○", "●●●", "○○●", "●●●", "●●○", "○○○" },
}, *field_sep[FIELD_COL_SIZE] = { "○", "○", "○", "○", "\n"} ;
time(&timer);
t_st = localtime(&timer);
cols[0] = t_st->tm_hour / 10;
cols[1] = t_st->tm_hour % 10;
cols[2] = COLON_IDX;
cols[3] = t_st->tm_min / 10;
cols[4] = t_st->tm_min % 10;
for( row=0; row<FIELD_ROW_SIZE; row++ ) for( idx=0; idx<FIELD_COL_SIZE; idx++ )
printf( "%s%s", art_ptr[row][cols[idx]], field_sep[idx] );
return 0;
}
0135デフォルトの名無しさん
2010/04/24(土) 13:58:53#include <stdio.h>
#include <time.h>
#define COLON_IDX 10
#define DOT "●"
char *cout(char *b, unsigned int s, int n, int r){
unsigned short art[] = { 0x56d4, 0xe934, 0xe746, 0x71c6, 0x93da, 0x719e, 0xf79c, 0x925e, 0xf55e, 0x73de, 0x0820 };
unsigned short i, j, c, d;
--s;
for(i = 0, c = art[n]; i < r; ++i) c >>= 3;
for(i = 0; i < 3 * s; i += s)
for(j = 0, d = (c >>= 1); j < s; ++j)
b[i + j] = d & 1 ? "●"[j] : "○"[j];
b[i] = 0;
return b;
}
int main(int ac, char **av){
time_t timer;
struct tm *t;
char b[sizeof(DOT) * 3];
int i;
time(&timer);
t = localtime(&timer);
for(i = 0; i < 5; ++i){
printf("%s○", cout(b, sizeof(DOT), t->tm_hour / 10, i));
printf("%s○", cout(b, sizeof(DOT), t->tm_hour % 10, i));
printf("%s○", cout(b, sizeof(DOT), COLON_IDX, i));
printf("%s○", cout(b, sizeof(DOT), t->tm_min / 10, i));
printf("%s\n", cout(b, sizeof(DOT), t->tm_min % 10, i));
}
return 0;
}
0136デフォルトの名無しさん
2010/04/24(土) 14:12:24このパズルを解くプログラム
0137デフォルトの名無しさん
2010/04/24(土) 14:19:04すまんがシラミツブシは興味ないんよ
それより論理的にさ
ここに1を置いたら絶対全部の合計は等しく出来ないから
1はこっちかこっちにしか置けない
っていう風に考えたい訳
0138デフォルトの名無しさん
2010/04/24(土) 16:38:16それ書くくらいならナンプレの答え探すプログラムの方がいいんじゃね?
0139デフォルトの名無しさん
2010/04/24(土) 18:04:37なにこれどうすんの?
0140デフォルトの名無しさん
2010/04/24(土) 18:33:550141デフォルトの名無しさん
2010/04/24(土) 18:49:23和がすべて等しいので
和の値は55/5=11
4個の和で11になる組み合わせを選ぶ
0142デフォルトの名無しさん
2010/04/24(土) 18:59:230143デフォルトの名無しさん
2010/04/24(土) 19:04:15それで解けたら1億やるよw
0144デフォルトの名無しさん
2010/04/24(土) 19:09:010145デフォルトの名無しさん
2010/04/24(土) 19:10:170146デフォルトの名無しさん
2010/04/24(土) 19:18:42全ての位置は2回数えられるから2倍にして4個の和が22になる組み合わせを選ぶ。
まあ、それでも解はないんだけどねw
0147デフォルトの名無しさん
2010/04/24(土) 19:22:287-11いい気分
0148デフォルトの名無しさん
2010/04/24(土) 19:26:21プログラムお願いします
0149デフォルトの名無しさん
2010/04/24(土) 19:27:160150デフォルトの名無しさん
2010/04/24(土) 19:55:560151デフォルトの名無しさん
2010/04/24(土) 23:22:00ジョーカーを除いたトランプ1組(52枚)で下記のルールで神経衰弱を行った場合、
最大何手必要なのかを求めるプログラム。
※但しコンピュータは最善の手を実行するものとする。
1. 52枚を適当にシャッフルしカードを伏せる(ことにする)
2. カードを2枚めくる(この行為を1手と数える)
2-1. 同じ数字であれば表にする(ことにする)
2-2. 異なる数字であれば、それらの数字を覚えて裏に戻す(ことにする)
3. 全てのカードが表になった(ことになった)ら終了
0152デフォルトの名無しさん
2010/04/24(土) 23:51:13それも数学の問題。プログラミングできないなら無理に出題しないでいいよ。
答えは全てのカードを覚えるのにかかる回数26回と
全てのカードを取るのにかかる回数26回の合わせて52回。
0153デフォルトの名無しさん
2010/04/25(日) 00:02:36不正解
覚えるのは25回で十分
0154デフォルトの名無しさん
2010/04/25(日) 00:16:410155デフォルトの名無しさん
2010/04/25(日) 00:21:08指摘してやってるのに分からんいなんてアホなのか?
25回覚えて、取り始めは、残った2枚のうちの1枚から始めれば良い。
(1枚取った時点で全てのカードが把握できる)
0157デフォルトの名無しさん
2010/04/25(日) 00:44:560158デフォルトの名無しさん
2010/04/25(日) 00:50:120159デフォルトの名無しさん
2010/04/25(日) 00:51:41>いや合わせて50回だ
何を合わせるんだ?
0160157
2010/04/25(日) 01:23:370161デフォルトの名無しさん
2010/04/25(日) 01:24:100162デフォルトの名無しさん
2010/04/25(日) 01:32:21A-2 3-4 5-6 7-8 9-10 J-Q K-A
A-A 2-3 2-2 3-3 4-5 4-4 5-5 6-7 6-6 7-7
8-9 8-8 9-9 10-J 10-10 J-J Q-K Q-Q K-K
0163157
2010/04/25(日) 02:07:42C_1-D_1 B_2-B_3 C_2-D_2 C_3-D_3 B_4-B_5 C_4-D_4 C_5-D_5 B_6-B_7 C_6-D_6 C_7-D_7
B_8-B_9 C_8-D_8 C_9-D_9 B10-B11 C10-D10 C11-D11 B12-B13 C12-D12 C13-D13
26回中、終わった数は次の13回
C_1-D_1 C_2-D_2 C_3-D_3 C_4-D_4 C_5-D_5 C_6-D_6 C_7-D_7
C_8-D_8 C_9-D_9 C10-D10 C11-D11 C12-D12 C13-D13
ここまでで、A_1からA13 の位置が全て分かっている。
ここまでで、B_1からB13 の位置が全て分かっている。
ここまでで、C_1からC13 の位置が全て分かっている。
ここまでで、D_1からD13 の位置が全て分かっている。
まだ出ていないのは、ない。
残っているのは13回。合計39回。
↓の20回を2回繰り返す
A_1-A_2 A_3-A_4 A_5-A_6 A_7-A_8 A_9-A10 A11-A12 A13-B_1
A_1-B_1 B_2-A_2 B_3-A_3 B_4-A_4 B_5-A_5 B_6-A_6
B_7-A_7 B_8-A_8 B_9-A_9 B10-A10 B11-A11 B12-A12 B13-A13
…
0164デフォルトの名無しさん
2010/04/25(日) 04:07:540165デフォルトの名無しさん
2010/04/25(日) 06:15:43結局何手が正しいのかわからないが、ネットワーク対戦とか少し面白そうと思ってしまったww
0166デフォルトの名無しさん
2010/04/25(日) 07:51:20トランプの並べ方は52!/(4!^13) = 249987600 (27.897 bit)
けど、引いたカードをどう考えればいいんだろう。
最初は1/13の確率で引くカードを予言できるから、1枚引くと3.7 bit得られることになるんだが、
2枚目以降は引くカードによって得られる情報量が変わってくる。
0167デフォルトの名無しさん
2010/04/25(日) 08:47:00各々の数に対して、丁度半分の2枚づつの情報が分かればOK。
1枚目は必ず知らない情報のカードをめくる。
そのカードの数の情報が1枚以下しか出てない場合、次に引くカードは知らない情報のカード。
2枚分かっていれば、分かっているカード組み合わせて表にしておく。
これを繰り返していけば、最悪、39回で全てのカードを表にできる。
0168デフォルトの名無しさん
2010/04/25(日) 08:55:56A-2 A-2 3-A 3-A 4-2 4-2 5-3 5-3 6-4 6-4
7-5 7-5 8-6 8-6 9-7 9-7 10-8 10-8 J-9 J-9
Q-10 Q-10 K-J K-J
最初から24手目までこういう風に出たら?
0169167
2010/04/25(日) 09:05:18数の種類が奇数だと、+1回になりそうな気もするし、
>>155と組み合わせられる気もするし
無理やり取ってしまえば、上手く行きそうな気もする…。
細かいところまでは分からんが、正解は38〜40回のどれか
0171デフォルトの名無しさん
2010/04/25(日) 09:42:23最大に上手く行かない手をどうぞ。
>>163 の者だけど
A_1-B_2 C_1-D_2 A_3-B_1 C_3-D_1 A_4-C_2 C_4-D_2 A_5-B_3 C_5-D_3 A_6-B_4 C_6-D_4
A_7-B_5 C_7-D_5 A_8-B_6 C_8-D_6 A_9-B_7 C_9-D_7 A10-B_8 C10-D_8 A11-B_9 C11-D_9
A12-B10 C12-D10 A13-B11 C13-D11
ここまでで24回、開いたカードは
A_1 A_2 A_3 A_4 A_5 A_6 A_7 A_8 A_9 A10 A11 A12 A13
B_1 B_2 B_3 B_4 B_5 B_6 B_7 B_8 B_9 B10 B11 B== B==
C_1 C_2 C_3 C_4 C_5 C_6 C_7 C_8 C_9 C10 C11 C12 C13
D_1 D_2 D_3 D_4 D_5 D_6 D_7 D_8 D_9 D10 D11 D== D==
後はどの裏カードから開いても、26回。合計50回
しかし、同じ開く順番なら
A_1-B_2 C_1-A_1 D_2-B_2 clear3
A_3-B_1 C_3-A_3 D_1-B_1 clear6
A_4-C_2 C_4-A_4 D_2-C_2 clear9
A_5-B_3 C_5-A_5 D_3-B_3 clear12
A_6-B_4 C_6-A_6 D_4-B_4 clear15
A_7-B_5 C_7-A_7 D_5-B_5 clear18
A_8-B_6 C_8-A_8 D_6-B_6 clear21
A_9-B_7 C_9-A_9 D_7-B_7 clear24
A10-B_8 C10-A10 D_8-B_8 clear27
A11-B_9 C11-A11 D_9-B_9 clear30
A12-B10 C12-A12 D10-B10 clear33
A13-B11 C13-A13 D11-B11 clear36
*12-*13 *12-*12 *13-*13 clear39
合計39回
0172デフォルトの名無しさん
2010/04/25(日) 10:08:20つまり、あれか?
情報がなんちゃらかんちゃら考えずに
分かってる組み合わせで取ってくのが最善手ってことか?
0173デフォルトの名無しさん
2010/04/25(日) 10:12:510174デフォルトの名無しさん
2010/04/25(日) 10:33:122枚目で知ってるのが出たときは、取らなくてよい(取ったら損する場合があるが、取って得する場合はない)
0175デフォルトの名無しさん
2010/04/25(日) 10:43:38> しかし、同じ開く順番なら
> A_1-B_2 C_1-A_1 D_2-B_2 clear3
これは3手目以降が変わっていくのでは?
0176デフォルトの名無しさん
2010/04/25(日) 13:06:56裏がえしのカードをめくると既に見たことのある数字がでまくる
(なければどれでも同じ)
ただし裏がえしのカードを二枚同時にめくったときは
二枚目は一枚目と違う数字の中から既に見たことのある数字がでまくる
(なければ一枚目と違う数字ならどれでも同じ)
最後の裏がえし4枚は同じ数字なのでめくると同時にとれる
だから52-2で50回だっつーの、とっくに結論でてるだろ
いい加減スレ違いなんだから終わりにしろよ
0177デフォルトの名無しさん
2010/04/25(日) 13:20:300178デフォルトの名無しさん
2010/04/25(日) 13:34:311 2 1 2 1 2 1 2 3 4 3 4 3 4 3 4 …
の順番にでてくる神経衰弱のプログラムを作ってみればいいんじゃない
50回だからw
0179デフォルトの名無しさん
2010/04/25(日) 13:44:160180デフォルトの名無しさん
2010/04/25(日) 14:00:570181デフォルトの名無しさん
2010/04/25(日) 14:06:44最後の裏がえし4枚は同じ数字なのでめくると同時にとれる
なんで、最後の4枚が同じ数字って予言出来るの?
そりゃ、>>1 2 1 2 1 2 1 2 3 4 3 4 3 4 3 4
って並べれば、残るのは全部13だけど、最後がこんなパターンだったら?
11 12, 11 12, 11 13, 11 13, 12 13, 12 13
0182デフォルトの名無しさん
2010/04/25(日) 14:22:23トランプとしては直感的じゃないけどA->1, 10->A, J->B, Q->C, K->Dで表す。
こんな場合どうなる?(以下、俺の試算)
1-D, 2-D, 3-D, 4-D, 5-C, 6-C, 7-C, 8-C, 9-B, A-B (ここまで10回 0組)
1-1, 2-2, 3-3, 4-4, 5-5, 6-6, 7-7, 8-8, 9-9, A-A (ここまで20回10組)
1-B, 2-B, 3-A, 4-A, 5-9, 6-9, 7-8 (ここまで27回10組)
あとは、見てないもう一枚をみるところから始めれば
全てのカードが把握できるから、残り16回16組 ( 計43回 )
0183デフォルトの名無しさん
2010/04/25(日) 14:47:510184デフォルトの名無しさん
2010/04/25(日) 15:01:484つの中身が不明な箱と
そのなかに4色のボールが入っていて
(同じ色は何度でも使えます)
中身を知らない方の人が4つ箱に入っているボールの色を予想して
中身を知っている方の人が
1.色だけがあっている数
2.色と場所があっている数
を教えます(ウソはつかないものとします)
正解を出すのに最低何回質問をすればよいでしょうか?
0185160
2010/04/25(日) 15:04:02B_1-A_1, B_2-A_2, B_3-A_3, B_4-A_4, B_5-A_5, B_6-A_6, B_7-A_7, B_8-A_8, B_9-A_9, B10-A10 (ここまで20回10組)
C_1-C11, C_2-D11, C_3-C10, C_4-D10, C_5-D_9, C_6-C_9, C_7-C_8 (ここまで27回10組)
ここまでで場所の分かっているカードは
A_1〜A10,A11,A12,A13
B_1〜B10,B11,B12,B13
C_1〜C_8,C_9,C10,C11,C12,C13
D_9,D10,D11,D12,D13
場所の分かっていないカードはD_1〜D_8 の8枚。残りの組は16組。27+16=43
0186デフォルトの名無しさん
2010/04/25(日) 15:08:16http://science6.2ch.net/math/
よし、とりあえず板移動w
0187GAME
2010/04/25(日) 15:20:18http://i-libro.net/game/playroom/showgame.php?gameid=79
0188デフォルトの名無しさん
2010/04/25(日) 15:22:010189160
2010/04/25(日) 16:21:37A_9-B_3 A10-C_3 A11-D_3 A12-B_4 A13-C_4
B_5-B_6 B_7-B_8 B_9-B10 B11-B12 B13-C_5
D_4-C_6 C_7-D_6 C_8-D_7 C_9-D_8 C10-D_9 C11-D10 C12-D11 C13
ここまでで、25回。
場所の分かっているカードは、
A_1〜A13
B_1〜B13
C_1〜C13
D_1〜D_4,===,D_6〜D11,===,===
場所の分かっていないカードは、D_5,D12,D13
すでに出来ているペアはC13-*13の1組、残りは25組。25+25=50
しかし、同じ開く順番なら
(A_1)-(A_2) (A_3)-(B_1) (A_1-B_1) (A_4)-(C_1) (A_5)-(D_1) (C_1-D_1)
(A_6)-(B_2) (A_2-B_2) (A_7)-(C_2) (A_8)-(D_2) (C_2-D_2) (A_9)-(B_3) (A_3-B_3)
(A10)-(C_3) (A11)-(D_3) (C_3-D_3) (A12)-(B_4) (A_4-B_4) (A13)-(C_4)
(B_5-A_5) (B_6-A_6) (B_7-A_7) (B_8-A_8) (B_9-A_9) (B10-A10) (B11-A11)
(B12-A12) (B13-A13) C_5-(D_4) (C_4-D_4) (C_6)-(C_7) (D_6-C_6)
(C_8)-(D_7) (C_7-D_7) (C_9)-(D_8) (C_8-D_8) (C10)-(D_9) (C_9-D_9)
(C11)-(D10) (C10-D10) C12-(D11) (C11-D11) C13
ここまでで、42回とC13
場所の分かっていないカードは、D_5,D12,D13
まだペアにならなくて、場所の分かっているカードはC_5,C12,C13
残りは3組。42+3=45
0190デフォルトの名無しさん
2010/04/25(日) 16:26:400191デフォルトの名無しさん
2010/04/25(日) 16:59:550192デフォルトの名無しさん
2010/04/25(日) 17:16:291234567890JQK11223344556677889900JJQQKK1234567890JQK
これを左から2枚ずつ引いていき、
覚えているのがあったら新しいのと覚えているのを引く。
12 34 56 78 90 JQ K1 11 12 22
23 33 34 44 45 55 56 66 67 77
78 88 89 99 90 00 0J JJ JQ QQ
QK KK K1 11 22 33 44 55 66 77
88 99 00 JJ QQ KK
0193デフォルトの名無しさん
2010/04/25(日) 21:50:26最低だと、1でいいんじゃないのか?
0194デフォルトの名無しさん
2010/04/25(日) 21:55:380195デフォルトの名無しさん
2010/04/25(日) 22:40:43いや、そのくらい軽くこなさないとマインドシーカーはクリアできないよ。
つーか終盤になると質問すら出来んレベル
0196デフォルトの名無しさん
2010/04/25(日) 23:07:26ん?1回目で当たったら1になるんじゃないのかい?
問題の不備だとは思うが。
0197デフォルトの名無しさん
2010/04/26(月) 00:04:5042回が正解
http://codepad.org/XrqVqoQJ
0198デフォルトの名無しさん
2010/04/26(月) 01:04:46仕事はやいですね
cpyすっごいならんでるよ
>>131
品質△ (悲
次はもっといい問題作ってきます
作者の自己解答上げておきます
http://codepad.org/c32vQo2w
0199160
2010/04/26(月) 01:31:2840回?
A23A4A5A6272829303J3Q4K44556566778788990900JJQJQQKKK
A2 3A AA 4A 5A AA 62 22 72 82
22 93 33 03 J3 33 Q4 K4 44 44
55 56 66 55 66 77 78 88 77 88
99 00 99 00 JJ QQ JJ QQ KK KK
(A)(2) (3)(A) (AA) (4)(A) (5)(A) (AA) (6)(2) (22) (7)(2)
(8)(2) (22) (9)(3) (33) (0)(3) (J)(3) (33) (Q)(4) (K)(4)
(44) ((4)4) ((5)5) (5)(6) (66) ((5)5) ((6)(6)) ((7)7) (7)(8)
(88) ((7)7) ((8)(8)) ((9)(9)) ((0)0) ((9)9) ((0)(0)) ((J)(J)) ((Q)Q)
((J)J) ((Q)(Q)) ((K)(K)) ((K)K)
0200160
2010/04/26(月) 02:14:09もとい!42回。
A23A4A5A6272829303J3Q4K44556566778788990900JJQJQQKKK
A2 3A AA 4A 5A AA 62 22 72 82
22 93 33 03 J3 33 Q4 44 K4 44
55 56 66 55 66 77 78 88 77 88
99 90 00 99 00 JJ JQ QQ JJ QQ
KK KK
(A)(2) (3)(A) (AA) (4)(A) (5)(A) (AA) (6)(2) (22) (7)(2) (8)(2) (22)
(9)(3) (33) (0)(3) (J)(3) (33) (Q)(4) (44) (K)(4) ((4)4) ((5)5) (5)(6) (66)
((5)5) ((6)(6)) ((7)7) (7)(8) (88) ((7)7) ((8)(8)) ((9)9) (9)(0) (00)
((9)9) ((0)(0)) ((J)J) (J)(Q) (QQ) ((J)J) ((Q)(Q)) ((K)K) ((K)(K))
0201192
2010/04/26(月) 03:19:16ttp://codepad.org/sBOxHahJ
また、「カードの総数 - 数字の数 / マークの数」
みたいな式でもあらわせるかも。
0202デフォルトの名無しさん
2010/04/26(月) 04:13:558手目に+A-Aで取らないという選択肢
+A+2 +3+4 +5+6 +7+8 +9+0 +J+Q +K-A *A+A -2*2 -3*3 #10手03組
-4*4 -5*5 -6*6 -7*7 -8*8 -9*9 -0*0 -J*J -Q*Q -K*K #20手13組
/A-A /2+2 /3+3 /4+4 /5+5 /6+6 /7+7 /8+8 /9+9 /0+0 #30手23組
/J+J /Q+Q /K+K
0203192
2010/04/26(月) 07:42:45それは、後に出てくるのが分かっている上での最善の手の気もする。
>>151に↓と書いてあるけど、この解釈の仕方により変わるので難しいが。
※但しコンピュータは最善の手を実行するものとする。
作者さんの答えきぼん。
0204デフォルトの名無しさん
2010/04/26(月) 08:07:04次の手でその2枚を取るのはどう考えても悪手。
0206デフォルトの名無しさん
2010/04/26(月) 09:46:02A01-A02 A03-B01 A04-C01 A05-D01 A06-B02 A07-C02 A08-D02 A09-B03 A10-C03 A11-D03
A12-B04 A13-C04 B05-B06 B07-B08 B09-B10 B11-B12 B13-C05
ここまで17手 0/26組
これで1-13が2組出ているんだから後は消していくだけじゃね?
C06-C13 がでたら A06-A13を取る
D04-D13 がでたら B04-B13を取る
ここまで35手 18/26組
記憶している残りのカードを取る
A01-05 & C01-05
B01-03 & D01-03
ここまで43手 26/26組
0207デフォルトの名無しさん
2010/04/26(月) 09:53:030208デフォルトの名無しさん
2010/04/26(月) 10:04:010209デフォルトの名無しさん
2010/04/26(月) 10:10:00C_4とD_4が2回目のめくりで出てるから回数には影響しないってだけで。
0210デフォルトの名無しさん
2010/04/26(月) 10:58:00最大値は計算するまでもないわけだから、
期待値とかどう?
0211デフォルトの名無しさん
2010/04/26(月) 11:25:440212デフォルトの名無しさん
2010/04/26(月) 14:57:100213192
2010/04/26(月) 17:46:05分かったかも。
覚えるのに2ターン、取るのに1ターンの3ターンかかり無駄という感じか。
2枚目で覚えているのを取れば、覚えるのに1ターン、取るのに1ターンにできる。
厳密には、覚えたのが1枚残るから、3-1=2、2-0.5=1.5ターンという感じか。
0214デフォルトの名無しさん
2010/04/26(月) 18:12:45開いてないC13を分かってるカードに分類しちゃだめだろw
0215100
2010/04/26(月) 18:33:16私の作った関数はこんな感じ。
--
using namespace std;
typedef complex<double> coordinate;
static vector<coordinate> func(coordinate const pa, coordinate const pb, double lac, double lbc)
{
double lab = abs(pb - pa);
double s = (lac + lbc + lab) / 2;
double s2abc = s * (s - lac) * (s - lbc) * (s - lab);
vector<coordinate> rtn;
if (s2abc < 0) return rtn;
double lcd = sqrt(s2abc) / lab * 2;
double lad = sqrt(lac * lac - lcd * lcd);
double lbd = sqrt(lbc * lbc - lcd * lcd);
double k = (lbd > lab ? -lad / (lbd - lad) :
lad > lab ? lad / (lad - lbd) :
lad / (lad + lbd));
coordinate pd = pa + k * (pb - pa);
if (lcd > 0) {
rtn.push_back(coordinate(pd.real() - lcd / lab * (pb.imag() - pa.imag()),
pd.imag() + lcd / lab * (pb.real() - pa.real())));
}
rtn.push_back(coordinate(pd.real() + lcd / lab * (pb.imag() - pa.imag()),
pd.imag() - lcd / lab * (pb.real() - pa.real())));
return rtn;
}
--
考え方はヘロンの公式で面積を求めてからCからの垂線を延ばすという意味で>124とほぼ同じ。>120もそうかな。
後は水平だろうとそうでなかろうと、垂線の足の位置はLadとLbdの比で決まる。どっち側かは兎も角。
最後に足から両側に垂線を延ばせば両方の点Cが求まる。
# 一点しかないとき(=面積が0)のときはもっとLcdを求める必要もないんだけど、そこは横着w
0216デフォルトの名無しさん
2010/04/26(月) 18:43:33引く
ax + by = cができる
円の方程式の片方に代入して解の公式を使う
解がある場合にax + by = cに代入すれば座標が求まる
0217デフォルトの名無しさん
2010/04/26(月) 23:48:45なるほど、printfに%.8sなんて使い方あったのですか。目から鱗。
0218デフォルトの名無しさん
2010/04/27(火) 02:28:28面白い。
最初はバラバラに予想して何色存在するかを見るのがいいのかな。
0219デフォルトの名無しさん
2010/04/29(木) 09:21:04たぶん4回。
1回目は0123の一手。
それでHit0、Blow3の時が一番難しいと思うが、
2回目は0122とかと1箇所を変えて入れ、
H0B2、H0B3、H1B1、H1B2のどれになるかで予想を変える。
2回目の結果で一番難しいのは、多分H0B2とBlowが減ってしまうやつ。
それでも、色の種類が3、2は1つ以下、3は1つ以上という事から、
答えを15種類ぐらいにしぼれる。
3回目はその15種類のうちのひとつの3200とかにすると、
その結果によって、4回目になりうる入力は1つに絞られるはず。
ただ、これはプログラムの問題というより、数学の問題だな。
ランダムで生成された問題を100回解いて、
平均回数を少なくするプログラムを作れとかの方が面白いかも。
0220デフォルトの名無しさん
2010/04/29(木) 11:32:360221デフォルトの名無しさん
2010/05/01(土) 03:15:5712 31 41 51 62 72 82 93 03 J3
Q4 K4 55 66 77 88 99 00 JJ QQ
KK 54 67 66 87 98 09 J0 QJ K5
QQ KK 11 22 33 44 11 22 33 44
55 77 88 99 00 JJ
46回
0222デフォルトの名無しさん
2010/05/01(土) 06:22:15なんで13〜21手の所でペア取っちゃうんだ?
0223デフォルトの名無しさん
2010/05/01(土) 06:24:430224デフォルトの名無しさん
2010/05/01(土) 06:34:350225デフォルトの名無しさん
2010/05/01(土) 06:37:060226デフォルトの名無しさん
2010/05/01(土) 06:39:47一回目のめくりで2枚目が出たら次に1枚目をめくるのが正しい。
0227デフォルトの名無しさん
2010/05/01(土) 06:42:2313種類の絵柄で、めくりの2枚目で3枚目4枚目を出せるのは何種類だ?
0228デフォルトの名無しさん
2010/05/01(土) 06:46:20だいたい、とっておいてもその場でめくるよりめくる回数増える可能性こそあれ、
減る可能性は全くないのにw
0229デフォルトの名無しさん
2010/05/01(土) 06:49:11じゃあ言い方を変えるわ。
>>224-225の取り方で最大何手になるよ
0230デフォルトの名無しさん
2010/05/01(土) 06:51:1746手より小さい手をお前が示さなきゃだめだろw
0231デフォルトの名無しさん
2010/05/01(土) 06:59:47>>206
0232デフォルトの名無しさん
2010/05/01(土) 07:16:16>>224-225で
1 2 1 2 3 2 3 2 4 3 4 3 5 4 5 4 6 5 6 5 7 6 7 6 8 7 8 7 9 8 9 8 10 9 10 9 11 10 11 10 12 11 12 11 13 12 13 12 1 1 13 13
これやってみろよ
0233デフォルトの名無しさん
2010/05/01(土) 07:30:510234デフォルトの名無しさん
2010/05/01(土) 07:33:58一概には言えないってことか。
0235デフォルトの名無しさん
2010/05/01(土) 10:54:013枚目まで待った方がいい。そしてそれは>>174が既に指摘してる。
待っても待たなくても同じか、待った方が手数減るかのどっちかで
待たない方が手数減るパターンは有り得ないのだから、待った方がいい。
引いた時点で、待っても得しないと分かりきっている場合は引いてしまってもいいが、別に引くメリットはない。
0236デフォルトの名無しさん
2010/05/01(土) 11:18:12お前はちょっと前の>>232すら見えないのか?
0237デフォルトの名無しさん
2010/05/01(土) 11:36:01一概には言えないなんてとぼけたこと抜かしてるから、
常にとらなければいいと言ってるだけ。
0238デフォルトの名無しさん
2010/05/01(土) 11:40:07C04 B05 D04 A06 C05 B06 D05 A07 C06 B07 D06 A08 C07
B08 D07 A09 C08 B09 D08 A10 C09 B10 D09 A11 C10 B11
D10 A12 C11 B12 D11 A13 C12 B13 D12 C01 D01 C13 D13
同じ数字が3回目に出てから取る場合。
(A01)-A02 (B01)-B02 A03-C02 B03-D02 A04-C03 B04-D03 A05-C04 B05-D04 A06-C05 B06-D05
A07-C06 B07-D06 A08-C07 B08-D07 A09-C08 B09-D08 A10-C09 B10-D09 A11-C10 B11-D10
A12-C11 B12-D11 (A13)-C12 (B13)-D12 C01-A01 D01-B01 C13-A13 D13-B13
ここまでで28回
すでに取れたのは4ペア、残り22ペアなので、22回。28+22=50
同じ数字が2回目に出てから取る場合。
(A01)-(A02) (B01-A01) (B02-A02) (A03)-(C02) (B03-A03) (D02-C02) (A04)-(C03) (B04-A04) (D03-C03) (A05)-(C04)
(B05-A05) (D04-C04) (A06)-(C05) (B06-A06) (D05-C05) (A07)-(C06) (B07-A07) (D06-C06) (A08)-(C07) (B08-A08)
(D07-C07) (A09)-(C08) (B09-A09) (D08-C08) (A10)-(C09) (B10-A10) (D09-C09) (A11)-(C10) (B11-A11) (D10-C10)
(A12)-(C11) (B12-A12) (D11-C11) (A13)-(C12) (B13-A13) (D12-C12) (C01-D01) (C13-D13)
38回
0239デフォルトの名無しさん
2010/05/01(土) 11:44:13>>232は3枚目まで待った場合に2枚目で取る場合より手数が増えるパターンなんだけど?
0240238
2010/05/01(土) 11:47:350241デフォルトの名無しさん
2010/05/01(土) 11:49:470242デフォルトの名無しさん
2010/05/01(土) 11:56:36その場で1・2枚目を取るよりも手数が少なくなる。
>>232の並びなら2枚目が一回目にめくられたら2回目で1枚目をめくって取ったほうが、
3枚目以降に取っておくより手数が少なくなる。
片方のやり方がもう一方のやり方より絶対少ないとはいいきれないので、
一概には言えないってのは正しい。
0243デフォルトの名無しさん
2010/05/01(土) 15:12:273枚目まで待つってどういう場合想定してる?
(1 2), (3 1)と引いたときに次に(1 1)を引くのは無駄だと言ってるだけで、
(1 2)の後に1引いたのに3枚目の1出るまで待てなんて気違いはいないぞ。
0244デフォルトの名無しさん
2010/05/01(土) 15:23:48>>224-225はお前が言う気違いのやり方のことだし、
そのパターンで手数が減るのが>>188の並びなんだよw
理解してないならしゃしゃり出てくんなよ
0245デフォルトの名無しさん
2010/05/01(土) 15:53:22unknown = cards # まだ引いてない未知のカード
known = [] # 引いたので既知だがまだとってないカード
i = 1
while(unknown, knownがともになくなる){
if(unknownがまだある){
card1 = unknownから1枚引く
if(card1 と同じ数がknownにある){
card2 = knownからcard1と同じ数を取り出す
print '%2d: (%2d* %2d)' % (i, card1, card2)
}
else{
card2 = unknownから1枚引く
if(card1 != card2){
knownにcard1を追加
knownにcard2を追加
}
print '%2d: (%2d* %2d*)' % (i, card1, card2)
}
else{ # unknownがもうない
card1 = knownから1枚取り出す
card2 = knownからcard1と同じ数を取り出す
print '%2d: (%2d %2d)' % (i, card1, card2)
}
i += 1
}
}
C/C++コードじゃなく擬似コードだが、カード引く順番はこれよりも効率よくやる方法ある?
0246デフォルトの名無しさん
2010/05/01(土) 16:00:57すまない。そんなバカがいることに気づかず>>174を出してしまった。
>>188のカードが3枚足りないことに気づかなかった君と同じくらいドジで申し訳ない。
0247デフォルトの名無しさん
2010/05/01(土) 16:03:420248デフォルトの名無しさん
2010/05/01(土) 16:09:25読み直したら
225 名前:デフォルトの名無しさん [sage]: 2010/05/01(土) 06:37:06
2枚目をめくった時に3枚目を引いたら、4枚目が出るまでスルーな
での2枚目は、めくりの2枚目だから>>225は分かってるように思えるんだが。
めくりの1枚目とめくりの2枚目の区別をつけて、めくりの2枚目で引いたときに引き直さなくていいと言ってるなら
>>174やら>>235, >>237と同じ意見。
0249デフォルトの名無しさん
2010/05/01(土) 16:13:42>>222読めば>>224-225の意味はわかるだろ。
一々バカに説明する身にもなってくれ。
0250デフォルトの名無しさん
2010/05/01(土) 16:15:33じゃあ、3枚追加したら何回になる?
>>188のカードに足りない5 12 13を追加して
君の方法で
1 2 3 1 4 1 5 1 6 2 7 2 8 2 9 3 10 3 11 3 12 4 13 4 5 6 7 8 9 10 11 12 13 5 4 6 7 6 8 7 9 8 10 9 11 10 12 11 13 5 12 13
を、46回よりも少なくできたのなら、俺が間違いだったことになる。
0251デフォルトの名無しさん
2010/05/01(土) 16:22:390252デフォルトの名無しさん
2010/05/01(土) 16:26:20>>222は読みようがない。それまで話の流れ的に使われていた
A23A4A5A6272829303J3Q4K44556566778788990900JJQJQQKKK
を使っていたとすれば、Q4 K4の後に5はこない。
0253デフォルトの名無しさん
2010/05/01(土) 16:34:02[2 2] (9 3) (10 3) (11 3) [3 3] [3 3] (12 4) (13 4) (5 6) (7 8)
(9 10) (11 12) (13 5) (4 4] [4 4] (6 6] (7 7] (6 6] (8 8] (7 7]
(9 9] (8 8] (10 10] (9 9] (11 11] (10 10] (12 12] (11 11] (13 13] (5 5]
(12 12] (13 13] [5 5]
>>252
これだから読解力のないバカは困る。
>>221の13〜21手目は一回目にめくったときに一枚位置がわかってるものを取ってる。
それに対して否定してるんだから>>222=>>224-225の意図が>>174とかと別なのは明白。
0254デフォルトの名無しさん
2010/05/01(土) 17:28:05うむ。俺の負けだな。ごめんよ。
0255デフォルトの名無しさん
2010/05/01(土) 18:05:01KKKKQQQQJJJJ00009999888877776666555544443322 12 113312
KKKKQQQQJJJJ00009999888877776666555544443322 12 121133
この2つは残りの6枚までは、前から順にとりつづける他にない。
残り8枚のところから考えると
1 2 1 1 3 3 1 2
(1 2) (1 1] (1 3) (3 3] (1 1] (2 2] ←負けた人の戦略
(1 2) (1 1) (3 3) (1 1] (2 2] ←勝った人の戦略
1 2 1 2 1 1 3 3
(1 2) (1 1] (2 2] (1 1) (3 3) ←負けた人の戦略
(1 2) (1 2) [2 2] (1 1) [1 1] (3 3) ←勝った人の戦略
(1 2)の後の1引いた時点で残りの並び順をエスパーしないと、最短手は得られない。
0256デフォルトの名無しさん
2010/05/01(土) 18:10:560257デフォルトの名無しさん
2010/05/01(土) 19:29:32そうなのだが、個人的にはなんだかつまらない。
0258デフォルトの名無しさん
2010/05/01(土) 20:19:00それを全部解かせるのは無理なので、
100回とかをシャッフルしたのを解いて、
平均手数の少なさを勝負?するとかは。
0259デフォルトの名無しさん
2010/05/01(土) 20:31:174*4*4*4*3*3*3*3*2*2*2*2*1*1*1*1=331,776
unknownがもうないフラグを追加すれば動くと思う。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10578.c
0260デフォルトの名無しさん
2010/05/02(日) 15:59:01シャッフルしたのを解き続けてみると43回っぽい。
1引き目からすぐにそろっているのを引くと46回が最大になる。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10584.txt
0261デフォルトの名無しさん
2010/05/02(日) 17:59:26static int Num[]={0,1,2,0,3,0,4,0,5,1,6,1,7,1,8,2,9,2,10,2,11,3,12,3,4,5,6,7,8,9,10,11,12,4,3,5,6,5,7,6,8,7,9,8,10,9,11,10,12,4,11,12};
static int Mark[]={0,0,0,1,0,2,0,3,0,1,0,2,0,3,0,1,0,2,0,3,0,1,0,2,1,1,1,1,1,1,1,1,1,2,3,2,2,3,2,3,2,3,2,3,2,3,2,3,2,3,3,3};
r = Mark[c] * NUM_SUU + Num[c];
/* r = rand() % CARD_SUU;
if(make[r])
continue;
*/
[46回 平均46.00回 最大46回] (1枚目からそろいを取らない)
[46回 平均46.00回 最大46回] (1枚目からそろいを取る)
0262sage
2010/05/02(日) 22:09:28ほんとそうなるね。
いくつかの数値の1つ目を1手目、2つ目以降を2手目で取らせて
4つを取れる事なく覚えてしまい、
1つ目に覚えているのを取らせているのか。(+→-とゲットしているターン)
だとやはり正解は46回なのかな。
それかアルゴリズムで工夫する余地があるのか。
0263デフォルトの名無しさん
2010/05/02(日) 23:40:09それをアルゴリズムとして定式化したときに、他のも46回未満で解けるかどうか。
試してみたところ、>>188は43回で出来たが他のは下手すりゃ50回越えたりした。
もっとアルゴリズムを改善すればできるのかもしれないが、できないかもしれない。
この問題を解くアプローチとしては、次のどちらか
・どんな札でも46回よりも少なく解ける取り方のアルゴリズムを開発してみる
・プレイヤーと、いじわるな運命の神様の2人プレイのゲームとみなして、
プレイヤーの行動に対し、常に最悪なカードを返しつづける神様のアルゴリズムを開発する
(最初から札を固定で与えるのじゃなくて、プレイヤーの行動によって次に出すカードを選ぶ)
になると思う。
0264デフォルトの名無しさん
2010/05/03(月) 01:07:35>>253の技がよく分からん・・
そのアプローチは両方面白いな、試して見る。
0265デフォルトの名無しさん
2010/05/03(月) 08:43:31MP、回復量はホイミ2:20、ベホイミ5:75、ベホマ8:全快、ベホマラー15:75(全体)。
回復量に誤差はなし(難しくなるので)。
MPぱパーティー共通の物とし、少ないMPで全快させる。
表示のさせ方などは自由。
キャラの能力例
勇者/300 戦士/350 僧侶/250 魔法使い/200 (←キャラの名前、最大HP)
(↓現在HP)
1、250 350 210 200
2、210 350 150 200
3、250 300 200 150
4、280 300 050 150
次の問題は>>280
0266デフォルトの名無しさん
2010/05/03(月) 08:53:210267デフォルトの名無しさん
2010/05/03(月) 09:35:14後は個別に一番MP消費の少ない魔法を選ぶ。
0268デフォルトの名無しさん
2010/05/03(月) 10:30:090269デフォルトの名無しさん
2010/05/03(月) 10:42:54次に、ベホマラー1回での最小MP消費を考える。
次に、ベホマラー2回での最小MP消費を考える。
この中で最小のものを答えとする。
なお、ベホマラー3回以上はありえない(ベホマ*4の方が少なくなるから)
0270デフォルトの名無しさん
2010/05/03(月) 10:46:06ベホマラー2回がベホマラーなしよりMPすくなくなる場合なんてあんの?
0272デフォルトの名無しさん
2010/05/03(月) 20:57:29http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10585.cpp
使い勝手の悪いところがあります。直せる方は教えてください。
0273デフォルトの名無しさん
2010/05/04(火) 01:19:30問題は正解!
ベホマラー3回は無い事や、ベホマよりベホイミ+ホイミ
の方がMPが少ない事も考慮されててgood。
使いにくくはなかったけど、HP入力ボックスの右か下に
/300とかと最大HPを表示するといいかも。
後、結果がメインウィンドウとMsgBox両方に表示されるが、
メインウィンドウの方は表示が途中できれてしまう。
0274272
2010/05/04(火) 14:39:51http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10586.c
0275デフォルトの名無しさん
2010/05/04(火) 21:17:15=== 開始 ===
0276デフォルトの名無しさん
2010/05/05(水) 03:20:550277デフォルトの名無しさん
2010/05/05(水) 07:52:300279デフォルトの名無しさん
2010/05/06(木) 04:04:320280デフォルトの名無しさん
2010/05/06(木) 10:43:13【C言語歴】 2年
【レベル】 ゲーム製作やってるぐらい
【コンセプト】 慣れた方法で。
#include <iostream>
#include <vector>
const static int NUM_SIZE = 5;
void main()
{
std::vector<int> intContiner;
int temp = 0;
int sum = 0;
std::cout << "5つ数を入力して下さい。" << std::endl;
for( int i = 0 ; i < NUM_SIZE ; ++i )
{
std::cout << i + 1 << "番目入力" << std::endl;
std::cin >> temp;
intContiner.push_back( temp );
}
std::cout << "5つ数の合計" << std::endl;
std::vector<int>::iterator itr = intContiner.begin();
for( ; itr != intContiner.end() ; ++itr )
{
sum += (*itr);
}
std::cout << sum << std::endl;
std::cout << "5つ数の平均" << std::endl;
std::cout << sum / NUM_SIZE << std::endl;
}
0281デフォルトの名無しさん
2010/05/06(木) 12:44:44tempは入力ループでしか使わないのだから、関数の先頭で宣言するのはバグの元。
sumは計算ループ以降でしか使わないのだから、関数の先頭で宣言するより直前で宣言した方が見通しがいい。
C流でやると言うのなら別に止めはしないが、iの宣言だけはポリシーに反することになるので美しくない。
あと、void main()よりもint main()の方が一般的だ。
↓以下main()の戻り値の型についてのいつもの議論w
0282デフォルトの名無しさん
2010/05/06(木) 12:48:54イテレータの宣言位置が変態なのは指摘漏れ?w
処で、>280は切り捨てられた平均値なんだね。小数点以下一桁まで欲しくね?
0283デフォルトの名無しさん
2010/05/07(金) 22:53:42メモリ無駄だろ。
しかも表示のところは 5 決め打ちだし。
0284デフォルトの名無しさん
2010/05/08(土) 01:06:15アホか?
0285デフォルトの名無しさん
2010/05/08(土) 02:29:33知らないなら書かなくていいんだよ。
0286デフォルトの名無しさん
2010/05/08(土) 16:45:35流石にワロタ
0287デフォルトの名無しさん
2010/05/08(土) 21:53:40というかどうみても釣り
0288デフォルトの名無しさん
2010/05/11(火) 06:01:52ここのでできるかも。
ttp://www.sm.rim.or.jp/~shishido/wsclass.html
0289デフォルトの名無しさん
2010/05/13(木) 21:04:220290デフォルトの名無しさん
2010/05/13(木) 21:23:42俺は>>283じゃないけどさ
すぐ揚げ足とって茶化すのだけは得意だな
もうちょっと意味、意図を汲み取る努力しろよ
お前らみたいなのと仕事したくないな正直
0291デフォルトの名無しさん
2010/05/13(木) 21:25:52「メモリが無駄(キリッ」とか言ってる男の人って恥ずかしいと思う。
いつの時代のPC使ってるんだろ?きもーい
0292デフォルトの名無しさん
2010/05/13(木) 22:28:22http://tsushima.2ch.net/test/read.cgi/newsplus/1273411891/
http://tsushima.2ch.net/test/read.cgi/newsplus/1273746605/
0293デフォルトの名無しさん
2010/05/14(金) 01:17:43悪意に解釈もなにも、メモリ無駄にならないのになるって書いてあるんだもん。
0294デフォルトの名無しさん
2010/05/14(金) 02:42:33あんたの方がよっぽどきもい。
0295デフォルトの名無しさん
2010/05/14(金) 09:25:570296デフォルトの名無しさん
2010/05/15(土) 11:26:35どゆこと?
0297デフォルトの名無しさん
2010/05/15(土) 12:57:01また古いものをw
>280では、以下の例外を除く変数は全て関数の先頭で宣言している。
但し、ループ制御のiだけはC99やC++でしか通用しない宣言を使っている。
また、>282でも指摘されているが、イタレータもブロックの途中で宣言している。
こういうのをポリシーがないというのだろ。
0298デフォルトの名無しさん
2010/05/18(火) 21:33:58【C++言語歴】約10年。
【レベル】いわゆるサンデープログラマ。主にフリーソフト制作等。
【コンセプト】 シンプルに。
【コメント】STLコンテナは簡潔に表記する為にある。本題でvector使うのは逆効果。
#include <iostream>
#include <iterator>
int main()
{
using namespace std;
const int numberOfNumbers = 5;
// 入力
cout << "数字を" << numberOfNumbers << "個入力" << endl;
istream_iterator<double> it(cin);
double sum = *it;
for (int i = 1; i < numberOfNumbers; ++i) sum += *++it;
double average = sum / numberOfNumbers;
// 出力
cout << "合計: " << sum << endl;
cout << "平均: " << average << endl;
// 終わり
return 0;
}
0299デフォルトの名無しさん
2010/05/18(火) 21:36:56入力された任意の8文字以内の単語2つからワード覆面算を作成せよ
入力された単語に含まれない文字は適当な記号を用いて表示すること
ただしそれぞれの覆面算は単一の解を持つものとし"浮き"は認めない
【難易度】
80分で中級
【入力例】
バナナ
バナナ
【出力例】
バナナ+バナナ=ナナ◎ [ 499+499=998 ]
バナナ+バナナ=○ナナナ [ 500+500=1000 ]
バナナ+バナナ=△△バ◇ [ 577+577=1154 ]
バナナ+バナナ=△△ナ◎ [ 599+599=1198 ]
バナナ+バナナ=ナ△△△ [ 611+611=1222 ]
バナナ+バナナ=△▽※バ [ 688+688=1376 ]
バナナ+バナナ=△ナ△○ [ 755+755=1510 ]
バナナ+バナナ=△☆バ※ [ 788+788=1576 ]
バナナ+バナナ=△ナ☆◇ [ 877+877=1754 ]
バナナ+バナナ=△◎ナバ [ 899+899=1798 ]
バナナ+バナナ=△バ△○ [ 955+955=1910 ]
【補足】
上記はWikipediaの例"バナナ+バナナ=シナモン"に合わせただけであり
入力される単語2つが同じとは限らない
0300デフォルトの名無しさん
2010/05/18(火) 21:42:410301298
2010/05/18(火) 22:01:47前回の出題よりは品質あげたつもりなんですがどうでしょう。
80分は作者が実際に解くのにかかった時間が基準なので異論は認めません。
0302デフォルトの名無しさん
2010/05/21(金) 03:07:45ヒェー。
0303デフォルトの名無しさん
2010/05/21(金) 05:47:06それを使うことの弊害を知りつつ使ってるのなら、無駄に恐れることはない。
おまじないのように付けてるのならタダのバカだけど、
おまじないのように避けてる人とそう変わらんよ。
0304デフォルトの名無しさん
2010/05/21(金) 12:43:18標準ライブラリ以外のライブラリは使っていないのだから
故意にcoutという変数を定義するようなことをしない限り名前は衝突しない
#include <iostream>してるんだから構文解析はそこで終わっていて
std名前空間にcoutの定義を探しにいっても追加のコストはほどんどない
と考えて記述が短くなる方を選んでるんだけど何か問題ありますか
0305デフォルトの名無しさん
2010/05/21(金) 13:16:460306デフォルトの名無しさん
2010/05/21(金) 15:38:450307デフォルトの名無しさん
2010/05/22(土) 15:39:29バナナ+バナナ
099+099=198(○ナ○)
100+100=200(○ナナ)
とかは不成立?
0308デフォルトの名無しさん
2010/05/22(土) 22:55:51バナナ+バナナ=○ナ○ [099+099=198]
覆面算は同じ文字のところには同じ数字を入れるルールなので
バナナ+バナナ=○ナ△のように記号を変えなければなりません
また数字の先頭が0ではないというのは暗黙の了解になっていて
こういった場合"バ"が0ではないことを利用して解くのが
普通なので099という表記もできません
バナナ+バナナ=○ナナ [100+100=200] については他にも
200+200=400、300+300=600、400+400=800と回答が複数あるので
パズルとして成立しません
Wikipediaに解説があります
http://ja.wikipedia.org/wiki/%E8%A6%86%E9%9D%A2%E7%AE%97
0309デフォルトの名無しさん
2010/05/23(日) 00:27:340311デフォルトの名無しさん
2010/05/25(火) 04:36:4916進テキストをファイル・コマンド・またはgetsから入力して、
バイナリーに変換し、test.txtファイルに落とす。
0312デフォルトの名無しさん
2010/05/25(火) 05:46:3281 AB 30 E3 81
0313デフォルトの名無しさん
2010/05/25(火) 19:41:390314デフォルトの名無しさん
2010/05/26(水) 09:39:130315デフォルトの名無しさん
2010/05/26(水) 10:03:55使わせといてあとでこれこれこういう理由があるから使うな、と言った方が
何でか教えないけどとにかく使うな、よりは覚えると思う
0316デフォルトの名無しさん
2010/05/26(水) 10:21:26そういうのは初心者スレでやれ。
0317デフォルトの名無しさん
2010/05/26(水) 11:19:190318デフォルトの名無しさん
2010/05/26(水) 11:29:50とどのつまりは>311の説明が下手なことが原因じゃないか。
ここは一つ、>311がお題を提示し直すまで静観しようじゃないか。
0319デフォルトの名無しさん
2010/05/26(水) 15:08:20http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:%E6%A4%9C%E7%B4%A2?search=%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A22010
標準出力には、
E7 89 B9 E5 88 A5 E6 A4 9C E7 B4 A2 E3 82 A6 E3 82 A3 E3 82 AD E3 83 9A E3 83 87
E3 82 A3 E3 82 A2
ファイルには 文字コードUTF-8で、
http://ja.wikipedia.org/wiki/特別検索?search=ウィキペディア2010
0320デフォルトの名無しさん
2010/05/26(水) 22:57:18何が言いたいんだよ。リンク間違ってるし。
あなたが311でgets()の使い方教えてあげてるつもりなら芯でくれ。
gets()は学校では習うかもしれないけど安全じゃないから誰も使わないの。
そもそもファイルからの入力にはgets()使えないでしょ。(本当は使えるけど。)
もしファイルからの入力はどの関数を使ってもいいのに
標準入力にはgets()を使わなければいけないという意味なら問題がおかしい。
311は出力ファイルは指定しているのに入力ファイルは指定していなかったり
バイナリーファイルの拡張子がtxtだったり
なぜか"%AB0"とか三桁の数字がでてきたり意味不明な上に
16進テキスト(16進数のこと?)とかコマンド(コマンドラインのこと?)とか
単語も日本語の文法もめちゃくちゃなんだからウダウダいってないで直せよ。
0321デフォルトの名無しさん
2010/05/27(木) 00:02:130322デフォルトの名無しさん
2010/05/27(木) 00:03:04%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%83%BC%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%8B%A1%E5%BC%B5%E5%AD%90%E3%81%8Ctxt%E3%81%A0%E3%81%A3%E3%81%9F%E3%82%8A%20
0323デフォルトの名無しさん
2010/05/27(木) 00:13:100324デフォルトの名無しさん
2010/05/27(木) 00:22:310325デフォルトの名無しさん
2010/05/27(木) 00:25:120326デフォルトの名無しさん
2010/05/27(木) 03:05:10#define ENOUGH_LONG_LENGTH 3
int main(void)
{
char buf[ENOUGH_LONG_LENGTH];
FILE *fp;
int miyazaki = 0xdeadbeef;
gets(buf);
fp = fopen("test.txt", "wb");
fwrite(&miyazaki, sizeof(int), 1);
fclose(fp);
return 0;
}
0327デフォルトの名無しさん
2010/05/27(木) 03:26:17ところが>>322でURLエンコードのデコードをバイナリー変換と呼んでるらしいことが
判明しているのでそれでは正解にならない
つか宮崎って何w
0328デフォルトの名無しさん
2010/05/27(木) 04:01:43deadbeef…(´;ω;`)ブワッ
0329デフォルトの名無しさん
2010/05/27(木) 08:08:54>バイナリーファイルの拡張子がtxtだったり
ftpでbinary modeで*.txtを転送するなんて当たり前のことだろ。
0330319
2010/05/27(木) 08:19:3916進数のASCII文字列を読み込んで、その内容をバイナリーでファイルに出力だ。
gets()して、それは捨てるって書いて無いよ。
デフォルトで使うだろうと予想してたけど。
0331デフォルトの名無しさん
2010/05/27(木) 08:43:08だからきちんと問題書けよ。つーか、課題丸投げなんだろ。宿題スレに逝けよ。
0332デフォルトの名無しさん
2010/05/27(木) 23:13:26問題文を短くしてgets()を使わなければ突っ込まれないと短絡的に考えたのだろうが
あいにくURLエンコーディングには英数字の平文が混ざるので16進数ではないし
実装を比べるスレの趣旨からしてscanf()を指定する必然性も全くないし
URLデコードは文字列から文字列への変換なんだからバイナリーとか発してる時点で馬科決定。
関数の使い方もコンピュータ用語も理解してないレベルで出題するなよ。
0333デフォルトの名無しさん
2010/05/28(金) 00:32:43#define ENOUGH_LONG_LENGTH 24
int main(void)
{
char buf[ENOUGH_LONG_LENGTH];
FILE *fp;
int miyazaki = 0xefBeadDe;
strcpy(buf, "ef Be ad De");
fp = fopen("test.txt", "wb");
fwrite(&miyazaki, sizeof(int), 1, fp);
fclose(fp);
return 0;
}
0334デフォルトの名無しさん
2010/05/30(日) 10:54:03%と16進文字2桁を標準入力(コマンド引数、ファイル以外)から入力して、
バイナリーに変換し、test.txtファイルに落とす。
%の後に2桁の16進文字が続かない場合は、変換しないでそのまま出力する。
例:
%Y %0X ⇒ 出力無し
%Y0 ⇒ '0'出力
%00 ⇒ '\0'出力
%Aa01 ⇒ '\xaa' '0' '1'出力
0335デフォルトの名無しさん
2010/06/05(土) 09:13:37#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
const int NUM_SIZE = 5;
int main()
{
int i, temp = 0, sum = 0;
vector<int> intContiner;
cout << "5つ数を入力して下さい。" << endl;
for( i = 0 ; i < NUM_SIZE ; ++i ) {
// 上のfor文内でiを宣言するなら、sumやtempも移動すべき場所があるべきだろう。
cout << i + 1 << "番目入力" << endl;
cin >> temp;
intContiner.push_back( temp );
}
cout << "5つ数の合計" << endl;
vector<int>::iterator itr = intContiner.begin();
for( ; itr != intContiner.end() ; ++itr ) {
sum += *itr;
}
cout << sum << endl;
cout << "5つ数の平均" << endl;
cout << sum / NUM_SIZE << endl;
}
0336デフォルトの名無しさん
2010/06/05(土) 17:16:25>282
0337デフォルトの名無しさん
2010/06/06(日) 15:00:48ジョンにとって縁起のいい数字は4と7で,
他はどうでもいい.ラッキーナンバーとは,
縁起のいい数字を含んだ10進数である.
整数aとbが与えられたとき,aとbの間にあるラッキーナンバーの個数を挙げよ.
オブジェクトの定義:
クラス名 : TheLuckyNumbers
メソッド名 : count
引数の型 : int,int
返値の型 : int
メソッドの表記 : int count(ints,intb)
として,公的メソッドとせよ.
注:
aの値は1から1,000,000,000まで
bの値は1から1,000,000,000まで
TopCoderでグーグル先生に聞いたら出てきた問題を適当に張ってみる
0338デフォルトの名無しさん
2010/06/06(日) 19:38:26ここまで分かった。
0339デフォルトの名無しさん
2010/06/12(土) 18:49:53できたぞ
#include <iostream>
#include <cmath>
using namespace std;
class TheLuckyNumbers
{
public:
int count(int s, int b);
};
int TheLuckyNumbers::count(int s, int b)
{
int digits=0,temp;
int k=0;
if(s<1 || s > 1000000000 || b<1 || b > 1000000000) return 0;
for(int i=s;i<=b;i++)
{
temp=i;
while(temp){digits++;temp/=10;}
temp=i;
while(digits)
{
if(temp % 10 == 4 || temp % 10 == 7) k++;
temp/=static_cast<int>(pow(10.0,digits));
digits--;
}
}
return k;
}
0340339
2010/06/12(土) 19:07:36digits--;
じゃなくて
temp/=static_cast<int>(pow(10.0,--digits));
だな。
0341339
2010/06/12(土) 19:25:34while(digits)
{
if(temp % 10 == 4 || temp % 10 == 7) k++;
temp/=10; digits--;
}
で最後だ
0342デフォルトの名無しさん
2010/06/13(日) 10:22:47始めにdigitを求め無くても、tempを10で割って行ったら0になる、
そうするともっと早い修正になる。
0343デフォルトの名無しさん
2010/06/13(日) 10:55:407777とかだと一つの数字で+4されないか?
0344デフォルトの名無しさん
2010/06/13(日) 11:27:16そうだな
7777→1個だな
まぁすぐ直せるだろうけど
0345344
2010/06/13(日) 11:51:22using namespace std;
class TheLuckyNumbers
{
public:
int count(int s, int b);
};
int TheLuckyNumbers::count(int s, int b)
{
if(s<1 || s > 1000000000 || b<1 || b > 1000000000) return 0;
int digits=0,temp;
int k=0;
for(int i=s;i<=b;i++)
{
temp=i;
while(temp)
{
if(temp % 10 == 4 || temp % 10 == 7){ k++; break;}
temp/=10;
}
}
return k;
}
0346342
2010/06/13(日) 12:25:230347デフォルトの名無しさん
2010/06/13(日) 13:13:260348デフォルトの名無しさん
2010/06/13(日) 13:24:40リンクならOK
本体は
http://pc12.2ch.net/test/read.cgi/tech/1268003943/l1
0349347
2010/06/13(日) 13:33:56http://pc12.2ch.net/test/read.cgi/tech/1268003943/674
0350348じゃばじんすげえ
2010/06/13(日) 14:47:13public: inline
static int count(int a, int b) {
if (a < 1 || a > 1000000000 || b < 1 || b > 1000000000 || a > b) return 0;
return count(b) - count(a - 1);
}
private: inline
static int count(int a) {
int result = 0, digits/*=0*/, add = 0;
if ((digits = search(a)) != 0) {
result = a % digits; a -= result; result += 1;
}
digits = 1;
while (a != 0) {
for (int i = 0, j = a % 10; i < j; i++) {
result += (i == 4 || i == 7) ? digits : add;
}
a /= 10; add = add * 8 + digits * 2; digits *= 10;
}
return result;
}
private: inline
static int search(int a) {
int result = 0;
for (int digits = 1; a != 0; digits *= 10, a /= 10) {
if (a % 10 == 4 || a % 10 == 7) {
result = digits;
}
}
return result;
}
};
0351デフォルトの名無しさん
2010/06/14(月) 00:35:58コメントくらい書こうぜ。
つーか、問題文にはsの方がbより小さいとは書いてないみたいだけれど。
>>337
再帰でやってみた。
http://codepad.org/3FZQcU4D
0352デフォルトの名無しさん
2010/07/20(火) 16:32:58n個の実数(double型)を配列に読み込んだ後,配列を指すポインタを用いて,最大値と最小値を探索するプログラムを作成せよ.また,入力した値の平均値もポインタ変数を用いて計算せよ.
0353デフォルトの名無しさん
2010/07/20(火) 20:06:100354デフォルトの名無しさん
2010/07/20(火) 21:13:41べっべつにあんたの為じゃないんだからっ///
ttp://codepad.org/H60OFDtO
0355デフォルトの名無しさん
2010/07/20(火) 23:05:53http://codepad.org/rqTsTdFt
0356デフォルトの名無しさん
2010/07/28(水) 05:55:11【C言語歴】1〜2ヶ月くらい
【レベル】独学
【コンセプト】
【コメント】
#include<stdio.h>
int main()
{
int dat[5];
int i,a=0;
for(i=0;i<5;i++){
printf("数を入力\n");
scanf("%d",&dat[i]);
a +=dat[i];
}
printf("合計%d 平均%f",a,(float)a/i);
}
0357デフォルトの名無しさん
2010/08/01(日) 00:32:04【C言語歴】 2日
【レベル】 初心者
【コンセプト】 今日やったところまででベストな感じでやる。
【コメント】 確認はした。
#include <stdio.h>
int main( void )
{
int i, num;
int sum = 0;
double ave;
puts("5つの整数を入力してね");
for(i=1; i < 6 ; i++){
printf( "%d個目:",i ); scanf("%d", &num);
sum += num;
ave = sum / i;
}
printf("合計は%dで平均は%.2fだよ\n", sum , ave);
return 0;
}
0358デフォルトの名無しさん
2010/08/01(日) 23:38:14これ、四則演算は自由に使ってよいけど、なるべく比較演算を減らそうとすると難しくなるよ。
0359デフォルトの名無しさん
2010/08/02(月) 00:21:12max = array[0];
min = array[0];
for(int i=1;i<n;i++){
if(array[i] >= max) max = array[i];
else if(array[i] < min) min = array[i];
}
よりも明確に少なくできるってこと?
それとも、
max = array[0];
min = array[0];
for(int i=1;n-i;i++){
if((int)(array[i]/max)) max = array[i];
else if((int)(min/array[i])) min = array[i];
}
ってこと?
0360359
2010/08/02(月) 00:24:430361デフォルトの名無しさん
2010/08/02(月) 11:17:25Cではループは0からスタートするのが一般的。
まして、5つの整数を入力するのに6と比較するのではややこしい。
∴for (i = 0; i < 5; ++i) {
# printf()の引き数も変更する必要があるけどね。
aveへの代入はループ内である必要が無い。
→そもそもaveに一時代入する必要もない。
sum / iでは整数除算が行なわれてしまう。
つまり、ave = sum / i では整数除算の結果をわざわざ実数に直しているだけ。
∴printf("合計:%d, 平均:%g\n", sum , (double) sum / N);
0362デフォルトの名無しさん
2010/08/02(月) 17:20:32表示時の加算をはぶくほうがいい
0363デフォルトの名無しさん
2010/08/02(月) 19:14:040364デフォルトの名無しさん
2010/08/02(月) 19:21:430365デフォルトの名無しさん
2010/08/02(月) 19:45:17こうする人もいる
0366デフォルトの名無しさん
2010/08/02(月) 19:56:22for(i = 0; i++ < N; ) ならN回ループするけど、前置じゃないしな
0367デフォルトの名無しさん
2010/08/02(月) 20:27:150368デフォルトの名無しさん
2010/08/02(月) 20:34:20まぁ大して変わらないだろうけど
0369デフォルトの名無しさん
2010/08/03(火) 03:30:090370デフォルトの名無しさん
2010/08/03(火) 23:03:21ぶっちゃけなにもかわらんよ
0371デフォルトの名無しさん
2010/08/04(水) 07:14:290372デフォルトの名無しさん
2010/08/05(木) 01:11:51一般的な書き方に合わせただけだろ
0373デフォルトの名無しさん
2010/08/24(火) 15:30:120374デフォルトの名無しさん
2010/09/07(火) 00:14:48【C言語歴】 半年程
【レベル】 初心者〜中級者の狭間
【コンセプト】 テンプレートと再帰
【コメント】 テンプレートが今熱い
ttp://codepad.org/dXXiEEdC
誰かとかぶってたら許して。
0376デフォルトの名無しさん
2010/09/28(火) 14:05:150377377 ◆/91kCCQXBo
2010/09/28(火) 16:48:20a,b,cを入力後、二次方程式 a*x^2+b*x+c を平方完成して、
= i*(x+j)^2+k となる、i,j,k を求めよ。
0378デフォルトの名無しさん
2010/09/28(火) 16:55:08j = b / (2 * a);
k = c - b * b / (4 * a);
0379377 ◆/91kCCQXBo
2010/09/28(火) 18:13:25【レベル】 C プロ
【コンセプト】C++
【コメント】次回言語は C++/CLI
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10932.cpp
0380デフォルトの名無しさん
2010/09/28(火) 18:22:30一般に浮動小数点数を == や != で比較するべきではない
0381デフォルトの名無しさん
2010/09/28(火) 20:46:28【C言語歴】 C++のみ半年程
【レベル】 ゲームプログラムしてる
【コンセプト】 単純に、シンプルに
【コメント】 コードは読みやすく書きましょう。
#include <iostream>
#include <numeric>
int main(){
size_t const INPUT_NUM = 5;
std::cout << INPUT_NUM << "個の数字を入力" << std::endl;
double buf[INPUT_NUM];
for ( size_t i = 0; i < INPUT_NUM; ++i ){
std::cin >> buf[i];
}
double const sum = std::accumulate( buf, buf + INPUT_NUM, 0 );
double const ave = sum / INPUT_NUM;
std::cout << "合計:" << sum << std::endl;
std::cout << "平均:" << ave << std::endl;
return 0;
}
>>298 のコメントは正しいけど、 >>298 のコードは読みにくいよね。
0382デフォルトの名無しさん
2010/10/03(日) 09:35:59そうか? 別に読みにくくなかったぞ。
0383デフォルトの名無しさん
2010/10/03(日) 13:46:56「ave」がキモくて読みにくいです
0384デフォルトの名無しさん
2010/10/03(日) 16:34:110385デフォルトの名無しさん
2010/10/22(金) 21:06:150386デフォルトの名無しさん
2010/10/22(金) 21:09:100387デフォルトの名無しさん
2010/10/23(土) 00:38:53そこに問題があるからさ
0388超絶初心者
2010/11/10(水) 22:46:01急いでます…
ピタゴラスの定理で、
数字を入力したら、その数字aまでのほかの2辺の値をtxtに書き込む
プログラムソース求めてます。
よろしければ協力お願いします。
0389超絶初心者
2010/11/10(水) 22:49:50↑たとえば、
aに999いれたらaが3〜999までのときの
b,cの値がずらぁ〜っと書き込まれる感じです。
0390デフォルトの名無しさん
2010/11/11(木) 00:04:290391デフォルトの名無しさん
2010/11/11(木) 12:11:05整数じゃないと問題解けないし
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int main(){
int a;
cout<<"a => ";
cin>>a;
ofstream fOut("pythagoras.txt");
for(int j=1; j<sqrt(a) ; ++j){
for(int k=j ; k<sqrt(a) ; ++k){
int sum(j*j+k*k);
if( sum<=a )
fOut<<sum<<"\t"<<j<<"\t"<<k<<endl;
else
break;
}
}
fOut.close();
}
0392超絶初心者
2010/11/12(金) 00:18:50たとえばのソースが、
#include<stdio.h>
int main()
{
FILE *fp;
int a,b,c,x,saikouchi;
printf("整数値を入力…\n");
scanf("%d",&saikouchi);
printf("あなたの入力は%d",saikouchi);
fp = fopen("suugaku.txt" , "a");
for(a = 3;a <= saikouchi;a += 2)
{
x = a * a;
x = x - 1;
b = x / 2;
c = b + 1;
fprintf(fp,"%d , %d , %d\n",a,b,c);
}
return 0;
}
と
0393超絶初心者
2010/11/12(金) 00:38:56#include<stdio.h>
int main()
{
FILE *fp;
int a,b,c,x,saikouchi;
printf("整数値を入力…\n");
scanf("%d",&saikouchi);
printf("あなたの入力は%d",saikouchi);
fp = fopen("suugaku2.txt" , "a");
for(a = 4;a <= saikouchi;a += 2)
{
x = a * a;
x = x - 4;
b = x / 4;
c = b + 2;
fprintf(fp,"%d , %d , %d\n",a,b,c);
}
return 0;
}
みたいなかんじです。
これをひとつにまとめたいんですが
if,for,…何をどう使えばいいのかわからずにいます
教えてください。
0394デフォルトの名無しさん
2010/11/12(金) 01:00:29詳細な仕様をちゃんと書いてくれ、誰もが数学を知ってるとはいえない状況だ。
場合分けするにも理屈がわからんとアドバイスできないからな。
0395超絶初心者
2010/11/12(金) 01:55:17a×a = 2b+1 = 2c-1という最も簡単な式を使ってます
x = a * a; (2b+1 = 2c-1 = x)
x = x - 1; (x = 2bにします)
b = x / 2; (b/2にしてます)
c = b + 1; (最後に1を足します)
説明不足でしたら
お願いします
0396デフォルトの名無しさん
2010/11/12(金) 02:11:400397デフォルトの名無しさん
2010/11/12(金) 02:16:22x = x - 1; (x = 2bにします) ←aが奇数ならxは偶数,偶数なら奇数
b = x / 2; (b/2にしてます) ←aが奇数ならxは整数,偶数なら実数
c = b + 1; (最後に1を足します) ←aが奇数ならxは整数,偶数なら実数
てなるからbcは実数型にして
b = x / 2.0
てすればおk
0398超絶初心者
2010/11/12(金) 02:45:32どちらでもできるのがわからないんです
0399デフォルトの名無しさん
2010/11/12(金) 18:53:57fprintf(fp,"%d , %d , %d\n",a,b,c);
を
int a,x,saikouchi; double b,c;
fprintf(fp,"%d , %lf , %lf\n",a,b,c);
0400デフォルトの名無しさん
2010/11/12(金) 19:07:04○%f
◎%g
2.)下2桁を表示します。この時、上位桁の0は表示します。
3.)以前に表示した数字と同じ数字の場合は+1桁を表示します。
4.)1000回繰り返しなさい。
言語:C#
0403デフォルトの名無しさん
2010/12/27(月) 16:04:26これくらいは自分でかこうやw
Mathの乱数つかって後は箇条書きの通りの処理実装するだけだぞ。
そこまでわかってるなら自前でかいた方がたぶんはやい。
うまく動かないときはソース貼り付ければ誰かがデバッグを手伝ってくれるとおもうよ。
0404デフォルトの名無しさん
2010/12/27(月) 16:09:211000回くりかえしたらどの数も平均10回重複するだろ。
0405デフォルトの名無しさん
2010/12/27(月) 16:10:320406デフォルトの名無しさん
2010/12/27(月) 17:43:00プラス一桁
0408デフォルトの名無しさん
2010/12/28(火) 01:09:35乱数がなかなか重複しねー。
#include <stdio.h>
#include <stdlib.h>
int Slice(unsigned int N,int Digit){
int T = 1;
for(int i = 0;i<Digit;i++) T*=10;
return N-((N/T)*T);
}
int main(){
unsigned int Rnd=rand()<<(17/3),Old=0;
unsigned int Sli =0,A,B,j;
srand(1);
for(int i=0;i<1000;i++){
for(j=2;j<10;j++){
A=Slice(Rnd,j);
B=Slice(Old,j);
if(A!=B) break;
}
printf("%u-",Rnd);
for(j=10-j;j!=0;j--)printf("0");
printf("%u\n",A);
Old = A;
Rnd=(rand()<<17)/3;
}
return 0;
}
0409デフォルトの名無しさん
2010/12/28(火) 01:15:40Oldをstd::mapにすれば履歴とれるけどね・・・。
0411デフォルトの名無しさん
2010/12/28(火) 03:00:44そもそも10桁の乱数の取得がめんどい。で、お茶をにごしてあるわけなんだが。
これはアリなのかナシなのか。。。
0412デフォルトの名無しさん
2010/12/28(火) 03:03:090413デフォルトの名無しさん
2010/12/28(火) 03:03:352)は実行するべきなのかスキップするべきなのか
普通に問題を読むと2)は実行した上で3)の条件を実行することになるがそれでいいのか
02.)下2桁を表示します。 但し、以前に表示した数字と同じ数字が表示される場合は
前回より1桁多く表示します。
03.)従って、桁数は3桁4桁と増えます。必要桁数分の上位桁の0は表示します。
0416デフォルトの名無しさん
2010/12/28(火) 19:58:57そっちのほうがスマートかも。
0417デフォルトの名無しさん
2010/12/28(火) 20:07:380418デフォルトの名無しさん
2010/12/28(火) 20:17:480419デフォルトの名無しさん
2010/12/28(火) 20:35:27一桁足りないぞ
10億〜99億9999万9999か?
どっちみち unsigned int では駄目って事だけど
0420デフォルトの名無しさん
2010/12/28(火) 20:37:110421デフォルトの名無しさん
2010/12/28(火) 20:55:470422デフォルトの名無しさん
2010/12/28(火) 22:07:08どうせ rand() が int64 に対応してないんだから、rand() で 0〜9 を取得して一桁づつ並べれば?
0424デフォルトの名無しさん
2010/12/29(水) 13:42:33なにかと思ったらここのやつだったか
0425デフォルトの名無しさん
2010/12/29(水) 14:42:270426デフォルトの名無しさん
2010/12/29(水) 18:02:56#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <map>
uint64_t Slice(uint64_t N,uint64_t Digit){
int T = 1;
for(int i = 0;i<Digit;i++) T*=10;
return (N%T);
}
uint64_t MakeNumber(int Digit){
uint64_t N=0;
for(int i=0;i<Digit;i++) N=(N*10)+(rand()%10);
return N;
}
int main(){
std::map<uint64_t,uint32_t> Counter;
uint64_t N=0,A;
for(int i=0;i<1000;i++){
N=MakeNumber(10);
for(int j=2;j<=10;j++){
A=Slice(N,j);
Counter[A]++;
if(Counter[A] == 1)break;
}
printf("%llu-%llu \n",N,A);
}
return 0;
}
0427426
2010/12/29(水) 18:16:00あと履歴は表示したやつだったのね。
>>if(Counter[A] == 1)break;
上の一文の下に、
Counter[A]--;
いれないとだめかも。
もうアイディアないからほかの人、良いの頼む。
02
002
1002
のように、頭の0を表示すると同じ数字でも別にできるという問題趣旨。
0429デフォルトの名無しさん
2010/12/29(水) 19:21:51俺のショートコーディング技術ではちょっと厳しいです。
文字列じゃないと0の扱いがかなり面倒ですなー。
誰か一番良いの頼む。
0430デフォルトの名無しさん
2010/12/29(水) 20:20:39環境が無いからパスします
0431デフォルトの名無しさん
2010/12/29(水) 20:49:21文字列で処理したベタベタのCで良ければどうぞ
ttp://codepad.org/TxZ96ZVs
#include <stdlib.h>
#include <stdint.h>
#include <string>
#include <map>
uint64_t Slice(uint64_t N,uint64_t Digit){
int T = 1;
for(int i = 0;i<Digit;i++) T*=10;
return (N%T);
}
uint64_t MakeNumber(int Digit){
uint64_t N=0;
for(int i=0;i<Digit;i++) N=(N*10)+(rand()%10);
return N;
}
int main(){
std::map<std::string, bool> Counter;
uint64_t N=0,A;
char aa[11];
std::string a;
for(int i=0;i<1000;i++){
N=MakeNumber(10);
for(int j=2;j<=10;j++){
A=Slice(N,j);
sprintf(aa, "%0*d", j, A);
a = aa;
if(! Counter[a]) { Counter[a]=true; break; }
}
printf("%s %llu\n", aa, N);
}
return 0;
}
0433デフォルトの名無しさん
2010/12/30(木) 03:32:42文字処理は苦手だけどこれくらいならなんとかなったな。もうこれ以上は俺の中にはないね
#include <iostream>
#include <string>
#include <map>
static const int Digit = 10;
static const int Loop = 1000;
std::string MakeNumber(int Digit,int Radix=10){
std::string S;
Radix = std::max(Radix,1);
Radix = std::min(Radix,62);
char ch[]="0123456789abcdefghijllnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ";//Radix MAX = 62
if(Digit > 0) S+= ch[(rand()%(Radix-1))+1];
for(int i=1;i<Digit;i++) S+= ch[rand()%Radix];
return S;
}
int main(){
std::string N,T;
std::map<std::string,int> Counter;
for(int i=0;i<Loop;i++){
N=MakeNumber(Digit);
for(int j=0;j<Digit;j++){
T = N.substr(Digit-j,j);
Counter[T]++;
if(Counter[T] == 1) break;
Counter[T]--;
}
std::cout<<N<<'-'<<T<<std::endl;
}
return 0;
}
0434デフォルトの名無しさん
2010/12/30(木) 03:39:19for(int j=0;j<Digit;j++){
↓
for(int j=2;j<Digit;j++){
なんだかんだではまっちゃったなぁ・・・。
「だめかも」なら確かめてみろ。要らないだろう。
0436デフォルトの名無しさん
2011/01/04(火) 21:42:59とかで動作を確かめてから書き込んだほうがいいぞ
0437デフォルトの名無しさん
2011/08/29(月) 12:58:12.540438デフォルトの名無しさん
2011/09/01(木) 00:50:12.270439デフォルトの名無しさん
2011/09/02(金) 04:12:23.090440デフォルトの名無しさん
2011/09/02(金) 19:36:35.120441デフォルトの名無しさん
2011/09/02(金) 20:17:42.010442デフォルトの名無しさん
2011/09/04(日) 14:01:19.98[2] 問題文:以下の条件で売り上げ集計プログラムを作りなさい。
�@クラスを用いる(困難なら構造体で可)
�A店舗毎に名前・売り上げを入力し、平均、標準偏差を計算
�B売り上げ毎に店舗を並び替える
�C店舗数は任意。
�D並び替えは簡単でよい。店舗数が少ない場合、単純に比較するだけでよい。
[3] コンパイラ名とバージョン: Microsoft Visual C++
[4] 言語:C
[5] その他の制限: 特にありません。
http://codepad.org/gz45HfDH
0443デフォルトの名無しさん
2011/09/04(日) 14:37:19.890444デフォルトの名無しさん
2011/09/04(日) 18:44:46.760445デフォルトの名無しさん
2011/11/14(月) 21:54:47.120446デフォルトの名無しさん
2011/11/19(土) 16:34:40.700447デフォルトの名無しさん
2011/12/07(水) 19:06:42.05自身が聞いた情報によると、もうじき中国はバブルがはじけて昔の貧乏な中国に戻るんだぜ
もう経済は破綻してて、取り戻すのは無理なんだそうだな
その世界ではやたら有名な政府関係者筋から聞いた確かな情報だな
まあお前ら頭の良い連中には、今さらなくらいのネタだ、
お前らからすればもう常識的なくらいの知識だろうぜ
0448デフォルトの名無しさん
2011/12/07(水) 19:12:59.07まー、俺に関係ない。
0449デフォルトの名無しさん
2012/05/14(月) 02:36:46.731. 0から9999までの整数を入力として受け取り、それをひらがなで出力するプログラムを書け
例) 0→ぜろ 4→よん 14→じゅうよん 87→はちじゅうなな 801→はっぴゃくいち 7974→ななせんきゅうひゃくななじゅうよん
2. 0から99999999(9999万9999)までの整数を入力として受け取り、それをひらがなで出力するプログラムを書け
例)88880007→はっせんはっぴゃくはちじゅうはちまんなな
3. 0から9999999999999999(9999兆9999億9999万9999)までの整数を入力として受け取り、それをひらがなで出力するプログラムを書け
例)8000800080008→はっちょうはちおくはちまんはち
4. 上記3において、入力が3の倍数もしくは3がつく数字であるときにはその数字を英語で出力せよ
0450片山博文MZボット ◆0lBZNi.Q7evd
2012/05/14(月) 15:43:21.54http://codepad.org/g98JHvA1
0451デフォルトの名無しさん
2012/05/14(月) 15:57:23.180452片山博文MZボット ◆0lBZNi.Q7evd
2012/05/16(水) 08:45:15.34http://codepad.org/EcS2XhUO
0453片山博文MZボット ◆0lBZNi.Q7evd
2012/05/17(木) 12:44:12.340454片山博文MZボット ◆0lBZNi.Q7evd
2012/05/17(木) 13:02:40.86http://codepad.org/EhkY8LlQ
0455片山博文MZボット ◆0lBZNi.Q7evd
2012/05/17(木) 13:11:01.73http://codepad.org/S1DtgCXB
0456片山博文MZボット ◆0lBZNi.Q7evd
2012/05/18(金) 11:21:03.77http://codepad.org/0mft2Mzh
0457デフォルトの名無しさん
2012/07/02(月) 21:08:18.35という記事に触発されて作ってみたんですが、
c++のiostreamだけでこれより短くなりませんか><?
http://ideone.com/QN526
■ このスレッドは過去ログ倉庫に格納されています