【C,C++】 ちょっと ..
[2ch|▼Menu]
2:デフォルトの名無しさん
09/10/12 01:17:21
言い出しっぺの法則

【問題】 5個の数を入力すると合計と平均を計算し出力するプログラムを作成してください。

次の問題は>>50

3:デフォルトの名無しさん
09/10/12 01:20:30
【C言語歴】 1ヶ月
【レベル】  超初心者
【コンセプト】 ちゃんと動くように書くのが精一杯
【コメント】 先月から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);
}

4:デフォルトの名無しさん
09/10/12 01:21:48
該当問題をアンカーしたほうがいいですね・・。

5:デフォルトの名無しさん
09/10/12 01:27:15
ちょw
>

6:デフォルトの名無しさん
09/10/12 03:12:57
霊長類研

7:デフォルトの名無しさん
09/10/12 05:39:25
>>2
【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;
}
これでどうですか?

8:デフォルトの名無しさん
09/10/12 07:50:45
>7
わざと()にしたのかなアセンブリじゃないんだから[]使わないとだめだよ
20[str]みたいにね、と思ったがfgets(, size_t, )だったなぁ
脳内lintには引っかかったが、脳内コンパイルできなかった

9:デフォルトの名無しさん
09/10/12 14:32:38
【C言語歴】 1ヶ月
【レベル】 超初心者
【コンセプト】 なし
【コメント】 なし

#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;
}

10:デフォルトの名無しさん
09/10/12 14:42:32
>>9

bが宣言されてなくない?
あとその書き方だと数が多いと大変

11:デフォルトの名無しさん
09/10/12 14:43:28
おっと、b見落としてた

12:デフォルトの名無しさん
09/10/12 19:45:13
ageて置きますね(^^;)

13:デフォルトの名無しさん
09/10/12 21:52:38
>>2
【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;
}

14: ◆yic3X9PxrE
09/10/13 00:29:00
>3
・buf は for の中で宣言しても良いかも。(その方が後で改造しやすい)
・sscanf は「scanできた数」を返すから、それできちんと入力されたかチェックした方が好ましい。
 ※ >3だと空入力とかも1回とカウントされてしまう。
・%lfでsscanfしてるんだから、 printfも %lf で出力した方が好ましい。

>7,9
・個別に書く事は得になし。

>13
・c++なんだからキャストは static_cast の方が好ましい。
 (というか出題は整数限定じゃないのだから、double型にしときゃ良い気が。)

総評:
・初期化を書くクセを突けた方が良いと思われ。
・コンパイルが通るのを確認してから書いた方が良いと思われ。
 今やWindowsでもコンパイラはタダなのだし。

15:デフォルトの名無しさん
09/10/13 02:48:58
>・%lfでsscanfしてるんだから、 printfも %lf で出力した方が好ましい。
これは論外。何故論外なのか判らないならprintf()とscanf()のマニュアルペー
ジを読め。
それでも判らないなら、人に物を教えようなどと言う烏滸がましいことは金輪際
止めた方がいい。

16:デフォルトの名無しさん
09/10/13 06:42:17
っ C99

17:デフォルトの名無しさん
09/10/13 07:34:01
shortだったらどうするんだろう……

18:普通の名無しさん
09/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;
}

19:別に返事は要らん
09/10/13 16:50:31
通常、標準入力はエコーバックされていると言う前提だから、入力直後の出力は冗長だね。
一方、標準出力はバッファリングされている可能性があるからフラッシュしないと折角のプロンプト出力が無駄になる。

20:デフォルトの名無しさん
09/10/13 19:16:48
const int MAX_COUNT = 5;



double data[5];

さすがプロ
つーか、配列の意味無し

21:デフォルトの名無しさん
09/10/13 20:32:55
>>20
ありがちなミスだなw
というお前さんも問題解いて行ってくれよ?

22: ◆yic3X9PxrE
09/10/14 00:45:18
>15
失敬。そしてわざわざ指摘をありがとう。(思いっきり勘違いしてますねこりゃ。)
そして>13さんごめんなさい。

>18
先輩、忘れ物です。
つ return 0;

>19
一応どのように読み取ったかを確認できるので、冗長ではあるけど意味はあるかと。
(例えば 1,2 などと入力すると…)

23:デフォルトの名無しさん
09/10/14 06:24:20
>>7 コンパイル済み
#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;
}

24:デフォルトの名無しさん
09/10/14 09:33:04
こういうのはイディオムとして覚えておこうよ。
fgets(str, sizeof(str), stdin);

25:デフォルトの名無しさん
09/10/14 10:12:37
よう、友達じゃないんだから。

26:普通の名無しさん
09/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;
}

27:普通の名無しさん
09/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;
}

28:デフォルトの名無しさん
09/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;
}

29:デフォルトの名無しさん
09/10/16 00:02:18
// 【C言語歴】 10年くらい
// 【レ ベ ル】 底辺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;
}

30:デフォルトの名無しさん
09/10/16 09:53:42
int main( /**/ void /**/ )

31:デフォルトの名無しさん
09/10/18 18:22:00
次の問題に行かずに沈みそうなのでage....

ゆ っ く り と い て い っ て ね

32:デフォルトの名無しさん
09/10/18 21:44:24
>>24
カッコつけんなボケ

33:デフォルトの名無しさん
09/10/19 10:02:18
別に格好悪いわけじゃないからいいじゃん。

34:デフォルトの名無しさん
09/10/19 17:18:01
そろそろ次の問題行かないと間が持たないな

35:デフォルトの名無しさん
09/10/19 21:35:57
では少し早いですが問題を・・。

【問題】 100個の数字をランダムに並べ替えて出力するプログラムを作成してください。
     ※同じ数は出力しない。毎回違った実行結果を表示する。

アルゴニズムと処理の違いが楽しみです。

次の問題は 一応50レス先の >>85
スレが停滞したらまたその時。。

36:デフォルトの名無しさん
09/10/19 21:45:20
>>35

問題訂正・・。
【問題】 1〜100までの数字をランダムに並べ替えて出力するプログラムを作成してください。
     ※同じ数は出力しない。毎回違った実行結果を表示する。

37:デフォルトの名無しさん
09/10/19 21:53:52
$ cat a.cpp
#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ってことで

38:37
09/10/19 21:58:41
乱数は考えるのがめんどくさかったので、 random() でごまかした。
random()の剰余で求める範囲の値を取り出すのは、ほんとはよい習慣ではない。
割り算を使うほうがいい。

39:37
09/10/19 22:00:23
いちおうテンプレ
【C言語歴】 かなり長い
【レベル】 プロ
【コンセプト】 KISS
【コメント】 たたき台ってことで、よろしく。


40:デフォルトの名無しさん
09/10/19 22:27:31
#include<stdio.h>
#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;
}

41:デフォルトの名無しさん
09/10/19 22:28:29
>>37

はえー・・・・
さすがプロ・・。
問題作った言い出しっぺが作れてません。
コンパイル通るのに動かないょ。

42:40
09/10/19 22:32:14
【C言語歴】 ほとんど書いたことない
【レベル】 Cは初級
【コンセプト】 変化を考慮
【コメント】 書き方などご指摘がありましたらよろしくお願いします。

43:デフォルトの名無しさん
09/10/19 23:20:43
【C言語歴】 6年 【レベル】 仕事で使用 【コンセプト】 擬似乱数 【コメント】 PCは書き込み規制・・・
#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;
 }
}

44:デフォルトの名無しさん
09/10/19 23:23:36
【C言語歴】 1ヶ月 【レベル】  超初心者 【コンセプト】 ちゃんと動くように書くのが精一杯
【コメント】 先月から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);
}

45:43
09/10/19 23:25:35
100*2で出力になってる…
memsetは1でi>=100でbreak

これだと発生しにくい数が出るけど…

46:デフォルトの名無しさん
09/10/19 23:36:03
>>37
目から鱗が・・。
コンパイル通りませんでしたが。
コピペだからでしょうか。

そのアルゴいただきます。

47: ◆yic3X9PxrE
09/10/19 23:49:20
>37
これは良いお手本。

>40
レベル考えりゃ上出来。叩き台にはむしろこちらが相応しい。
敢えてツッコミ入れるなら、
・稀に「1と1を交換」のような、無駄な操作が発生する辺りは要改善かも。
・並べ替えの部分は↓を先頭に持ってきて、swap処理を固めた方が好ましいかと。
 int selected_index = rand() % (MAX - i) + i;

48: ◆yic3X9PxrE
09/10/20 00:42:15
>43
・if(i>=100) break; は while の条件に書けば良いような。(効率気にするならdo〜while)
・1で初期化し-1するより、0で初期化し、1代入の方が良い気が。
 (「配列全体を0で初期化」なら char map[100] = {0}; のように書けるので。)
・アルゴリズムは中々凝ってるような。(一部良く分からないけど…)


>44
・まづはgoto使うのを止めれ。ループとかブロック脱出に使うのは絶対ダメ。
・else ケースに括弧を付けるべき。括弧の対応が分かり辛く、フローも追い難い。

ちなみに無限ループに陥るのは、i がMOREにジャンプする度リセットされるから。
かつ内側のforループ内でほぼ確実にMOREにジャンプする。

49:デフォルトの名無しさん
09/10/21 05:29:42
この問題じゃ工夫の余地が無いよな。

50:デフォルトの名無しさん
09/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++)

51: ◆yic3X9PxrE
09/10/21 23:21:31
>50

それだけでは不足。
selected_index の範囲も要修正。


>46
>コンパイル通りませんでしたが。

c99対応のコンパイラ(gccなど)が必要。

52:デフォルトの名無しさん
09/10/22 00:59:05
良う修正せん。どう修正する。

53:デフォルトの名無しさん
09/10/22 10:49:43
>>52
何を?

54:デフォルトの名無しさん
09/10/22 11:09:17
>>51

55:デフォルトの名無しさん
09/10/22 11:17:13
>>54
どっちを?

56:デフォルトの名無しさん
09/10/22 11:23:14
selected_index を修正する?

57:デフォルトの名無しさん
09/10/23 00:54:03
>40
>int selected_index = rand() % (MAX - i) + i;

selected_index ⇒ i 〜 MAX-1

58:デフォルトの名無しさん
09/10/23 01:49:52
>40
int selected_index = rand() % (LENGTH - i) + i;

URLリンク(kansai2channeler.hp.infoseek.co.jp)

59:58
09/10/24 13:54:06
これをtemp省略前の状態にリバース!
スレリンク(tech板: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;
}

60:>>1
09/11/08 09:10:38
C/C++/STL/MFC/CLI 共通問題

【問題】 10進数を入力して2進数を表示する。
     ※入力は1回のみで、繰返しはしない。数字以外は入力しない。
     ※正数は先頭の0は表示しない。負数は32ビットを表示する、間に空白などは埋めない。
     ※入力にE又は小数点がある場合、浮動小数点数は32ビットで考える。

次の問題は 40 レス先の >>100

61:デフォルトの名無しさん
09/11/08 10:47:38
頭の0を取るのは正規表現でも使ってください

#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");
}


62:デフォルトの名無しさん
09/11/08 10:49:27
int main(int ac, char **av)
{
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;
}


63:デフォルトの名無しさん
09/11/08 11:27:06
>>61
リトルエンディアンとビックリエンディアンの判別くらいしないといけないね

>>60
ここの人か
スレリンク(tech板:442番)

64:60
09/11/08 16:10:15
 >>61
 リトルエンディアンとビックリエンディアンの判別くらいしないといけないね
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");
}

65:デフォルトの名無しさん
09/11/09 14:52:05
>>60
>     ※入力に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個)
特にエンディアンがどうこう言ってるやつは、リトルエンディアンとビッグエンディアンの両方でテストしている?


66:デフォルトの名無しさん
09/11/10 15:56:34
input: (123, 0.5, 3.4e-6, etc...) > 0.0
0
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

67:デフォルトの名無しさん
09/11/10 16:18:26
>>66
>【問題】 10進数を入力して2進数を表示する。
題意にそえば、10進数の0.5は2進数では0.1になるはずだが。
0.75(decimal)ならば0.11(binary)

68:デフォルトの名無しさん
09/11/10 20:00:57
IEEEの仕様があるのは知ってるか?

69:デフォルトの名無しさん
09/11/10 23:00:40
>>67
それはただの少数であって浮動小数点数ではないから題意に添わない

70:デフォルトの名無しさん
09/11/10 23:25:18
参考資料
Wikipedia項目リンク


71:デフォルトの名無しさん
09/11/10 23:31:45
>>67
しったか乙

72:デフォルトの名無しさん
09/11/11 01:56:45
>>69
基の問題文は、浮動小数点数と明記していないから、67のような捉え方もできると思う。
もっとも、その後の※を読めば浮動小数点数なのだろうとは考えられるけど。

73:デフォルトの名無しさん
09/11/23 00:53:29
捕手

74:デフォルトの名無しさん
09/12/06 07:57:49
次のようなデータがテキストファイルで1ギガ程度あり、これを数値順にソートしたいです。
どのようにすればいいですか。

文字列 タブ文字1個 数値
・・・・・・・・・・ ・・
・・・・・ ・・
[参考]文字列は可変長です、文字列にタブは含みません。
数値範囲は32ビットunsigned intの整数です。
課題の要点ではないので、ソートはqsort等ライブラリを使用して下さい。
速度の為、malloc, newを使うなら、1024個を1回にとか、まとめてして下さい。

75:74
09/12/06 07:59:40
次のレス番は>100くらい

76:74
09/12/06 12:08:24
> 文字列は可変長です、文字列にタブは含みません。
文字列の長さは固定長の間違いでした。

77:デフォルトの名無しさん
09/12/06 13:00:12
> 文字列の長さは固定長
そんなら OS で用意されている sort 使うよw
※"文字列は可変長"でも sort 使うが

78:デフォルトの名無しさん
09/12/06 13:53:38
sort -n +1

79:デフォルトの名無しさん
09/12/26 08:34:04
題目:宝くじの「還元率計算」
入力:標準ストリーム(テキストファイル)
1行目 1枚の金額 "," 発売総枚数
2行目以降 順位 "," 当選金額 "," 当選本数
最終行 改行
出力:標準ストリーム
タイトル行
入力データ、各行毎の期待値
合計期待値、還元率

ヒント:当選確率*当選金額=期待値(予想配当額)
    期待値/1枚の金額=還元率

CUI/GUIどちらでも可
次スレは>>100あたり

80:デフォルトの名無しさん
09/12/26 10:00:24
宝くじって売り切れる訳じゃないんだろ
売れ残った部分に当りくじがあったら
還元率は大幅に下がるんじゃね?

81:デフォルトの名無しさん
09/12/26 10:13:23
>>80
あなた、いつ議員に「当選」したんだ?

82:デフォルトの名無しさん
10/02/19 15:50:26
[1] 授業単元:
[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()で終わること)

83:デフォルトの名無しさん
10/02/20 15:41:01
>>82
宿題はスレ違い

84:デフォルトの名無しさん
10/02/28 08:23:12
#include <malloc.h>
#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;
}

85:デフォルトの名無しさん
10/02/28 17:47:41
>>84
b??(i??)??(j??) = 0;
a??(i??)??(j??) = 0;

86:デフォルトの名無しさん
10/02/28 19:14:14
b<:i:><:j:> = 0;
a<:i:><:j:> = 0;

87:デフォルトの名無しさん
10/03/03 03:08:44
>>86
すげー、ほんとにコンパイル通る。
それなんて名前なの?記号だけなのでググりようがない。

88:デフォルトの名無しさん
10/03/03 22:31:16
memset() すりゃいいんでないの?w


89:デフォルトの名無しさん
10/03/04 09:47:49
0で初期化したいんならcalloc()でいいだろw

*(*(b + i) + j) = 0;
*(*(a + i) + j) = 0;

90:デフォルトの名無しさん
10/03/04 20:52:47
>>87
ダイグラフ

91:84
10/03/04 23:36:37
>>89
WORD (*b)[2]; // まちがえた

92:デフォルトの名無しさん
10/03/07 02:46:41
>>90
とんくす
日本語じゃ情報少ないのな。英語だとWikipediaにのってるが

93:84
10/03/07 08:18:53
Trigraph
× トリグラフ
○ トライグラフ
URLリンク(dic.yahoo.co.jp)

94:デフォルトの名無しさん
10/03/22 09:38:47
コンパイラ名とバージョン: (Visual C++)

作業用フォルダの所は空白、ソースと同じフォルダにショートカットは有ります。
ショートカット「Visual Studio 2005」
から cl xxx.cpp するのが面倒な場合はどのようにするのでしょうか。
PATHをずらっと並べるのは無しで.batのみで可能でしょうか?

95:デフォルトの名無しさん
10/03/23 01:04:08
>>94
まず、ここは質問スレじゃない。
さらに、それはC/C++の問題ではない。

96:デフォルトの名無しさん
10/03/23 10:09:52
C#, C♯, C#相談室 Part55
>>95 返信サンキュこちらで聞いてきます。

97:デフォルトの名無しさん
10/03/27 21:58:00
>>2
【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;
}

98:デフォルトの名無しさん
10/03/28 08:36:40
>>2
【レベル】 プロ
#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;
}

99:デフォルトの名無しさん
10/03/28 17:21:22
次の問題は>>100

100:デフォルトの名無しさん
10/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の円を書いて交点を求めればいいが……

101:デフォルトの名無しさん
10/03/29 15:59:04
もっとゆとりでも解けるような問題が欲しいよ

102:デフォルトの名無しさん
10/03/29 16:14:25
ユークリッド平面でいいの?

103:デフォルトの名無しさん
10/03/29 16:41:57
>>101
それじゃ、次の制約でどうぞ。
・ya == yb, Lac == Lbc

>>102
非ユークリッド平面だと私自身がついていけないからパスw

104:デフォルトの名無しさん
10/03/29 16:45:45
要は三角不等式と2円の交点でしょ?

105:デフォルトの名無しさん
10/03/29 18:16:54
2つの球の交線(円)かもしれん

106:デフォルトの名無しさん
10/03/30 01:39:29
これってA点を (0,0) に移動して
計算するとわりと簡単?


107:デフォルトの名無しさん
10/03/30 14:41:15
いや計算量は変わらん

むしろ座標系を回転して >>103 が正解(ry

108:デフォルトの名無しさん
10/04/13 22:08:11
>>26のさ

for(i=0; i<MAX_NUM; i++){
// printf("何かの数:");
if(scanf("%lf", &data ) != 1) break;  ←この文
// printf("%g\n", data);
sum += data;
}

ifの中身がよくわからんないんだけどどうなってんの?

109:デフォルトの名無しさん
10/04/14 00:10:05
>>108
if(!(scanf("%lf", &data))) break;

if(!(scanf("%lf", &data))!=0) break;
と変形した後に
if(scanf("%lf", &data)==0) break;
と変形するのが正しい
※論理否定は必ず否定が掛かっている方の真偽を逆にする
と言っても、cinの定義なんか覚えてないから
単純に戻り値をscanf()に置き換えて良いかは知らんので
そこら変は他の人にまかせる

110:109
10/04/14 00:15:40
※論理否定は必ず否定が掛かっている方の真偽を逆にする
って書いたけど、何か違うな…
正確には、偽で比較するって言うか、真で比較しては駄目っての言うのが正しいのか?


111:デフォルトの名無しさん
10/04/14 00:20:39
そもそも>>108が分からないのがifの何なのかが俺には分からない。

112:デフォルトの名無しさん
10/04/14 00:27:56
>>109-110
ごめんよくわかんない

>>111
if文の()の中身の
scanf("%lf", &data ) != 1
ってどういうこと?って意味

113:デフォルトの名無しさん
10/04/14 00:46:00
>>112
scanfの戻り値が1でない場合真

int scanf(const char* format, ...);
scanfの戻り値は"formatで指定された型に従って代入に成功した要素数"

scanf("%lf", &data )
↑でdataに代入成功すれば1が返る 失敗すれば多分0(scanfなんて使わないから分からない)

114:デフォルトの名無しさん
10/04/14 00:57:19
>>112
今回の要素数は1個なので>>118のように変形しても大丈夫だが
2以上の数値が変える場合、変形には気をつけないとね

NG例
!(2) != 0
両辺に論理否定をかけて
!(!(2)) != !(0)
左辺の二回の論理否定を打ち消すと
2 != !(1)
さらに変形すると
2 != 1
真になってしまう

OK例
!(2) != 0
両辺に論理否定をかけて
!(!(2)) != !(0)
変形すると
!(0) != 1
さらに変形すると
1 != 1
よって偽になる(これが正解)

115:114
10/04/14 01:00:30
>>118に期待しよう…orz
まあ、こんな感じで、ミスを避けるために、
数値の真偽を問う場合は、必ずfalse(0)と比較するってのが良く使われる。

116:デフォルトの名無しさん
10/04/14 01:17:26
>>100
答えの数までは簡単に出せるが、その先が思いつかん…
何か、結構単純な解き方になる気もするのだが…

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;


117:デフォルトの名無しさん
10/04/15 00:11:52
Cが2コ存在する場合要するに三角形が出来る場合
正解かどうかも分からんし考えながら起こしたのでもの凄い汚い点に注意。

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;


118:デフォルトの名無しさん
10/04/15 00:15:16
つ*づ*き
sqrt,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));



119:デフォルトの名無しさん
10/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;


120:デフォルトの名無しさん
10/04/15 02:00:40
cからabを通る直線上に垂線を下ろしたときの交点をdとすると垂線の長さhの2乗は
h*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


121:デフォルトの名無しさん
10/04/15 02:02:15
>>120 訂正
×Yd = Ya + k*Xn ○Yd = Ya + k*Yn

122:デフォルトの名無しさん
10/04/15 02:09:26
あ、内積じゃなくて高さ求めるのかw ごめん。
でadと直角な単位ベクトルにhと-hをかけて二つ答えだしておしまいだ。

123:デフォルトの名無しさん
10/04/15 22:23:40
>>113-114
サンクス
数字だと1をかえしてそれ以外だと0かえして
ブレイクしてやんお!
ってことだよねと、わかったかんじだ

124:デフォルトの名無しさん
10/04/15 23:48:04
>>103の条件(ya == ybのみでも可)であれば、三角形ABCの三辺の長さから
ヘロンの公式で面積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;



125:デフォルトの名無しさん
10/04/15 23:53:11
プログラマは数学出来ない人多いんだなと驚いた

126:124
10/04/16 00:04:59
> // → 点A、点B、点Oの位置関係からxaに対して加算するのか減算するのかを決定
> 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;


127:デフォルトの名無しさん
10/04/24 01:34:54
100の出題者はそろそろ解答書くべきじゃないの。
それに問題複数あった方がつまらない問題無視できるからいいと思う。

128:デフォルトの名無しさん
10/04/24 01:38:20
【問題1:時計】
現在時刻をアスキーアートで表示せよ

【表示例】
●●○○○●○○○○○○●○●○○●●
○○●○●○●○○●○○●○●○●○○
○●●○●○●○○○○○●●●○●●●
●○○○●○●○○●○○○○●○●○●
●●●○○●○○○○○○○○●○●●●

【難易度】
40分で初級


129:デフォルトの名無しさん
10/04/24 01:44:05
適当に作ったので面白いかどうかはしらないけれど
こんな感じの問題名、解答時間、難易度つきテンプレ希望

130:デフォルトの名無しさん
10/04/24 09:17:18
できたが、俺にはAA作りの才能がないことが分かったのと、codepadじゃ時間取得系関数動かねぇ。
URLリンク(codepad.org)

ローカルでの実行結果。
○●○○●●●○○○○○○●○○○●●
●○●○●○●○○●○○●●○○●○○
●○●○●●●○○○○○○●○○●●●
●○●○○○●○○●○○○●○○●○●
○●○○●●○○○○○○●●●○●●●

131:デフォルトの名無しさん
10/04/24 09:37:15
>>129
所要時間: 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;
}


132:デフォルトの名無しさん
10/04/24 09:46:00
○があると読みにくいので
スペースに置き換えてください
ずれないように注意出来たら二段

133:130
10/04/24 10:10:14
うげぇ、配列サイズ足りてねぇorz

134:131
10/04/24 11:20:02
変数名等、全体の見通しを良くして、さらにAAを>>130から借用。

#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;
}

135:デフォルトの名無しさん
10/04/24 13:58:53
// UTF-8 SJIS EUC 対応してたらちょっと時間掛かった
#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;
}

136:デフォルトの名無しさん
10/04/24 14:12:24
URLリンク(www2.ezbbs.net)

このパズルを解くプログラム

137:デフォルトの名無しさん
10/04/24 14:19:04
>>136
すまんがシラミツブシは興味ないんよ
それより論理的にさ
ここに1を置いたら絶対全部の合計は等しく出来ないから
1はこっちかこっちにしか置けない
っていう風に考えたい訳


138:デフォルトの名無しさん
10/04/24 16:38:16
>>136程度だと総当たりでも十分速いだろなぁ。
それ書くくらいならナンプレの答え探すプログラムの方がいいんじゃね?

139:デフォルトの名無しさん
10/04/24 18:04:37
>>136がわからない
なにこれどうすんの?

140:デフォルトの名無しさん
10/04/24 18:33:55
総和が5の倍数であることを利用するとあまる数字の組み合わせを何個かに限定できるかな


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5398日前に更新/118 KB
担当:undef