C/C++の宿題を片付けます 106代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/05/03(土) 19:34:21【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう.
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):()
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
【前スレ】
C/C++の宿題を片付けます 105代目
http://pc11.2ch.net/test/read.cgi/tech/1208268461/
0153デフォルトの名無しさん
2008/05/06(火) 17:51:16削除可不可判断できなかったら宿題提出の時説明求められたら アッー!
0154デフォルトの名無しさん
2008/05/06(火) 17:54:57生徒が本当に理解してるか判断するため?
馬鹿じゃねーの?きちんと宿題提出してるんだからそれでいいじゃねーかよ。
0155デフォルトの名無しさん
2008/05/06(火) 17:58:38まぁ言ってることは同意する
0156デフォルトの名無しさん
2008/05/06(火) 18:01:33> currに1を足したものが、nextになるんですよね??
「なる」と言うより、
dist[next.x][next.y] = dist[curr.x][curr.y] + 1;
によって、そう「する」。
> ということは、77行目のdist[next.x][next.y]もdist[curr.x][curr.y]+1も
> どっちも同じ値になって、比べられない気がするのですが。。。
dist[next.x][next.y] = dist[curr.x][curr.y] + 1;
を実行する前の段階なので、同じ値とは限らない。
nextに未到達ならば、dist[next.x][next.y]には初期化で代入したMAX_X*MAX_Yが入っているし、
到達済みなら到達距離が入っている。
0157826
2008/05/06(火) 18:29:03レス有難うございます。
77行目のdist[next.x][next.y]が未探索であれば
MAX_X*MAX_Yの値が入っているんですね。
ちょっと気になったのですが、
★どうして未探索の場合は、『MAX_X*MAX_Y』と掛け算した大きな値を
入れているのでしょうか??
★dist[curr.x][curr.y]に隣接するdist[next.x][next.y]が
既に配線されたネットとして到達距離が入っている場合
どんな操作になっているのでしょうか。
★それと87行目のfront == bottomとありますが
frontとbottomが同じ値のときの状況が
イメージできないのですが・・・。
教えて下さい(´・д・`)
0158デフォルトの名無しさん
2008/05/06(火) 18:44:37宿題に関連しているとは言え、あまり立て続けだと反感買いそうだぞ。
自分でよく考えてみれば、解かると思う。
> MAX_X*MAX_Y
未探索の位置nextについて、distが十分大きな値を持っていれば、
if (dist[next.x][next.y] > dist[curr.x][curr.y] + 1)
の条件が成立するから。
> 既に配線された...
(grid[i][j] == '.' ? MAX_X*MAX_Y : 0) でdistは0なので、探索されない。
> front == bottom
上のwhile (front != bottom) のループは、
ゴールに到達したときに、未探索位置をキューに残したままbreakする。
また、ゴールに到達できなかった場合は、
キューの未探索位置が尽きるので、front == bottom が成立して抜ける。
0159826
2008/05/06(火) 18:57:10レス有難うございます。
自分でよく考えたのですが分かりませんでした。
質問ばかりして申し訳ありませんでしたm(__)m
0160デフォルトの名無しさん
2008/05/06(火) 19:07:10いや、頭ひねって、逆立ちして考えてもわからなかったら
また質問すればいい。
聞かれれば俺は教えるから。
0161デフォルトの名無しさん
2008/05/06(火) 19:32:17[2] 問題文(含コード&リンク):自分が使っているコンピュータで評伝できる最少の正の実数を求めるプログラムを作成せよ
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2008年5月7日午前9時まで
どなたかお願いします
0162161
2008/05/06(火) 19:32:480163デフォルトの名無しさん
2008/05/06(火) 19:38:180164デフォルトの名無しさん
2008/05/06(火) 19:48:11#include <stdio.h>
int main()
{
double a, t;
for(t=1; t; a=t, t/=2);
printf("%e\n", a);
return 0;
}
016588
2008/05/06(火) 20:01:54>>infoaryは何の変数 何の変数ってどういう意味?
infoaryが翻訳してもでてこなかったので何なのかがわりませんでした。
教えていただけないでしょうか?お願いします
0166デフォルトの名無しさん
2008/05/06(火) 20:10:35翻訳??
変数名になんでinfoaryってつけたかってことかい? それは気分だ
別にaaaでも良い
変数の型のこといってるなら、ソースで構造体宣言してるし、
どういう使い方するかは、前に説明したし、何が聞きたいのかが分からない
0167デフォルトの名無しさん
2008/05/06(火) 20:15:06ありがとうございます
0168108
2008/05/06(火) 20:32:04亀レスですが、ありがとうございます。
がんばって理解できるようにします.
0170デフォルトの名無しさん
2008/05/06(火) 20:41:060171デフォルトの名無しさん
2008/05/06(火) 21:01:10[2] 問題文(含コード&リンク):
瓶詰めのオレンジジュースを売っている店がある。
今この店では、開店50周年キャンペーンとして、
オレンジジュースの空瓶を5本持って行くと、
新しいオレンジジュース1本と交換してくれるサービスをしている。
キーボードから飲みたいオレンジジュースの本数を入力すると、
最低この店から買わなければならないオレンジジュースの本数と、
最終的に残る空瓶の本数を表示するプログラムを作成せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 5月6日 23:59まで
[5] その他の制限: 読み込んでよいヘッダはstdio.hのみ
メール課題が出ているのを忘れて遊んでいた俺はもうダメ人間です。
よろしくお願いします
0172デフォルトの名無しさん
2008/05/06(火) 21:05:59何度も買いに行く計算?
0173おやじPG
2008/05/06(火) 21:15:24すれ間違えてました。すみませんでした。
0174デフォルトの名無しさん
2008/05/06(火) 21:22:15買うのは最初だけですが、サービスを貰いに行くのは何度でも。
らしいです。
0175デフォルトの名無しさん
2008/05/06(火) 21:43:21#include<stdio.h>
int calc(int num, int *p_empty){
int count=0, empty=0;
while(num){
count+=num;
empty+=num;
num=empty/5;
empty%=5;
}
*p_empty=empty;
return count;
}
int main(void){
int i, num, count, empty;
scanf("%d", &num);
for(i=num*4/5;;i++){
count=calc(i, &empty);
if(count>=num) break;
}
if(count>num) count--,empty+=5;
printf("Require:%d Initial:%d Empty:%d\n", num, i, empty);
return 0;
}
0176デフォルトの名無しさん
2008/05/06(火) 21:57:46int main( void )
{
int wantBuy = 0;
int needBuy = 0;
int serviceTotal = 0;
int serviceEach = 0;
scanf( "%d", &wantBuy );
serviceTotal = wantBuy / 5;
do{
serviceEach = serviceTotal / 5
serviceTotal += serviceEach;
}while( serviceEach != 0 );
needBuy = wantBuy ー serviceTotal;
return 0;
}
ケータイからなので動くか分からん(´・ω・`)
0177デフォルトの名無しさん
2008/05/06(火) 21:59:28printf("%d",needBuy);
↑これ足しといて
0178デフォルトの名無しさん
2008/05/06(火) 22:00:22セミコロン忘れもあるね(´;ω;`)
0179デフォルトの名無しさん
2008/05/06(火) 22:00:24本当にありがとうございました。175さんのお陰でメールが間に合いました。
何故か空瓶が一本余分に出ていましたので、また調べてみます。
0180デフォルトの名無しさん
2008/05/06(火) 22:01:32空き瓶表示か!!!!
孟子にタイ
0181デフォルトの名無しさん
2008/05/06(火) 22:01:44ありがとうございます。今後のプログラムの参考にさせていただきます。
0182デフォルトの名無しさん
2008/05/06(火) 22:17:29空き瓶が5本以上あるとき、交換してもらうかどうか、
またその余分に貰ったジュースを飲むかどうか、それが問題だ。
0183デフォルトの名無しさん
2008/05/06(火) 22:48:12>>174
0184デフォルトの名無しさん
2008/05/06(火) 23:00:45結局、たとえば5本飲みたいので5本買ったとして、
最終的な空き瓶は5本、0本、1本のどれ?
>>174からはどうしても読み取れない。
0185デフォルトの名無しさん
2008/05/06(火) 23:10:42あーそうだね
0186デフォルトの名無しさん
2008/05/06(火) 23:35:30これ以上短くはできないぜ
#include<stdio.h>
int main( void )
{
int a;
scanf( "%d", &a );
printf("buy:%d ",(a/5*4+1)+((a%5)?a%5-1:0));
printf("empty:%d\n",(a%5)?a%5:5);
return 0;
}
0187デフォルトの名無しさん
2008/05/06(火) 23:49:54printf("buy:%d ",a-(a-1)/5);
はどう?
0188デフォルトの名無しさん
2008/05/06(火) 23:52:57って入力したら17が出るお
0189デフォルトの名無しさん
2008/05/06(火) 23:55:080190デフォルトの名無しさん
2008/05/06(火) 23:55:48まだ短縮できる。
a;main(){scanf("%d",&a);printf("buy:%d empty:%d\n",a?a*4/5+1:0,a?(a-1)%5+1:0);}
0を入力したらbuy:0 empty:0になるように修正しておいた。
0191デフォルトの名無しさん
2008/05/07(水) 00:00:33余りは
(a-1)%5+1
だけでどう?
0192デフォルトの名無しさん
2008/05/07(水) 00:04:47VC2008ではそれでいけた。
ただ、C89では負数の剰余は処理系依存らしい。
0193デフォルトの名無しさん
2008/05/07(水) 00:47:47[2] 問題文(含コード&リンク):24時49分31秒ー16時51分40秒の引き算です
[3] 環境
[3.1] OS: Linux
3.2]gcc
[3.3] 言語: (C
[4] 期限: 2008年5月8日
[5] その他の制限: 全く習ってない初歩の初歩の段階です
よろしくおねがいします
0194デフォルトの名無しさん
2008/05/07(水) 00:59:52#include <stdio.h>
int main() {
int time1 = 24*3600 + 49*60 + 31; /* 24時49分31秒 */
int time2 = 16*3600 + 51*60 + 40; /* 16時51分40秒 */
int td = time1 - time2;
printf("%d:%02d:%02d\n", td/3600, (td/60)%60, td%60);
return 0;
}
0195デフォルトの名無しさん
2008/05/07(水) 01:00:290196デフォルトの名無しさん
2008/05/07(水) 01:18:22どうもありがとうございます
>>195
説明が足りなかったみたいで、すいません
0197デフォルトの名無しさん
2008/05/07(水) 02:46:210198デフォルトの名無しさん
2008/05/07(水) 02:49:01ShortCodingという本で知ったがこんなこともできる
main(a){scanf("%d",&a);printf("buy:%d empty:%d\n",a?a*4/5+1:0,a?~-a%5+1:0);}
0199デフォルトの名無しさん
2008/05/07(水) 02:59:45ヤメレ
0200デフォルトの名無しさん
2008/05/07(水) 03:08:30ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6455.c
適切に入力しなかった場合の措置はとってないので、あしからず。
0201デフォルトの名無しさん
2008/05/07(水) 04:11:360202デフォルトの名無しさん
2008/05/07(水) 04:15:09ヽ \ , -┬┬、/. /
\ 7 ヽ ヽ_∨
ヽ l . 二 --`ゝ
/ゝ' _.. '-'´ ・ ・ ヽヽ
j−'´ | = _人 ~ l 〉
/ ̄ ̄l ノ´
/ ̄ ̄~| _.. ィ‐┐
ゝ──'>ー<二○'´i ̄
`ー┐ l
_」 つ
ゝ───…  ̄
ヽ(´・ω・)ノ うるせぇ、ひこにゃんぶつけんぞ
| /
UU
0203デフォルトの名無しさん
2008/05/07(水) 10:03:50time.h使うなら、mktime()とかlocaltime()を使えよ。strftime()も。
0204デフォルトの名無しさん
2008/05/07(水) 10:59:49そこまで言うならお前がソースを書けよw
自分は知ってます、みたいな発言をされても誰も納得しねーよ
あと、あれは struct tm の構造体、変数を使うためにやったようなもんだろ。
指定のライブラリを使わなければいけないというルールは存在しないよ。
0205デフォルトの名無しさん
2008/05/07(水) 11:11:380206デフォルトの名無しさん
2008/05/07(水) 11:30:51#include <stdio.h>
void ToHMS(int t1[3], int t2[3], int result[3])
{
int H = 0,M = 0;
result[2] = t1[2]- t2[2];
if(result[2] < 0){
result[2] = t1[2] + 60 - t2[2];
M = 1; }
if(M == 1) result[1] = t1[1] -1 - t2[1];
else result[1] = t1[1] - t2[1];
if(result[1] < 0){
if(M == 1) result[1] = t1[1] + 60 -1 - t2[1];
else result[1] = t1[1] + 60 - t2[1];
H = 1; }
if(H == 1) result[0] = t1[0] -1 - t2[0];
else result[0] = t1[0] - t2[0];
}
int main()
{
int t1[3] = {0},t2[3] = {0},result[3] = {0};
puts("一つ目の時間を,で区切って入力してください");
scanf("%d,%d,%d",&t1[0],&t1[1],&t1[2]);
puts("二つ目の時間を,で区切って入力してください");
scanf("%d,%d,%d",&t2[0],&t2[1],&t2[2]);
ToHMS(t1,t2,result);
puts("一つ目の時間と二つ目の時間の差分は");
printf("%d,%d,%d\n",result[0],result[1],result[2]);
return 0;
}
0207203
2008/05/07(水) 11:43:39#include <stdio.h>
#include <time.h>
#include <math.h>
static time_t inputTime()
{
char buf[10];
struct tm in = {0, 0, 0, 1, 0, 70};
printf("Input time (hh:mm:ss) > ");
if (fgets(buf, sizeof(buf), stdin) == NULL) return 0;
if (sscanf(buf, "%2d:%2d:%2d", & in.tm_hour, & in.tm_min, & in.tm_sec) < 3)
return 0;
return mktime(& in);
}
int main(int argc, char ** argv)
{
time_t timeA = inputTime();
time_t timeB = inputTime();
time_t diff = (time_t) fabs(difftime(timeA, timeB));
struct tm * result = gmtime(& diff);
char buf[10];
strftime(buf, sizeof(buf), "%H:%M:%S", result);
puts(buf);
return 0;
}
0208デフォルトの名無しさん
2008/05/07(水) 12:02:29if(count>num) count--,empty+=5;
↓
if(count>num) count--,empty+=5-1;
0209デフォルトの名無しさん
2008/05/07(水) 12:05:32大きい数を扱える環境で組み合わせの数出して見れ。
ruby -e 'puts 2**100000'
99900209301438450794403276433003359098042913905418169177152927386314583246425734
(375行中略)
25155304734389883109376
ありえんだろ。
0210デフォルトの名無しさん
2008/05/07(水) 12:47:09[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
1000個までの整数あるいは小数を打ち込み、
その平均と標準偏差を表示することのできるプログラムを作成しなさい。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン: Microsoft Visual Studio .NET 2003
[3.3] 言語:C言語
[4] 期限:2008年5月9日5時まで
[5] その他の制限: 特に制限はありません。
大学生です。プログラミングの授業で課題が出されましたが、解けませんでした。
ご解答よろしくお願いします。
0211デフォルトの名無しさん
2008/05/07(水) 13:06:10#include <stdio.h>
#include <math.h>
#define SET 1000
int main()
{
int i;
double value[SET] = {0},sum = 0,average=0,hyoujunnhensa;
//数値を格納
for(i = 0; i < SET; i++)
scanf("%lf",&value[i]);
//平均値を出す
for(i = 0; i < SET; i++)
sum += value[i];
average = sum/SET;
printf("平均値 : %lf\n",average);
//ばらつきをみるために
//個々のデータから平均値を引く(偏差)
for(i = 0; i < SET; i++) value[i] -= average;
//次に偏差を2乗する
for(i = 0; i < SET; i++) value[i] = pow(value[i], 2.0);
sum = 0;
//データのばらつきを見るため合計し
//データ数で割って平方根を取る
for(i = 0; i < SET; i++)
sum +=value[i];
hyoujunnhensa = sqrt(sum/SET);
printf("標準偏差は%lf \n",hyoujunnhensa);
return 0;
}
0212デフォルトの名無しさん
2008/05/07(水) 13:44:32そんな全ての方法を試すみたいなアルゴリズム使ったら解けるわけないよ。
n = 100000 だから、だいたい O(n log n) 〜 O(n^{1.5}) くらいの
アルゴリズムなら、それなりにまともな時間で解ける。
実際 >>84 の問題に対しては、そのようなアルゴリズムが存在する。
(>>90 の解法でも O(n^2) だから数日待てば終わるはず)
0213212
2008/05/07(水) 14:15:17参考のために、適当に作った入力と対応する出力をアップロードする。
アップローダの制限のため n = 100000 のデータは1つだけしか入れてない。
ちなみに手元のプログラムでは、10 秒弱で結果が出ている。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6458.zip
0214デフォルトの名無しさん
2008/05/07(水) 14:55:57[2] 問題文(含コード&リンク):
(1)
1 から 10000 までの数字を順番に表示しなさい(1数字ごとに改行)。
ただし、どこかの桁に 3 が現れるか、もしくは 3 の倍数のときは
数字の後に ! (エクスクラメーションマーク)をつけなさい。
(2)
1 から n までの数字の中で、どこかの桁に 3 が現れるか、
もしくは 3 の倍数であるような数字の個数を求めるプログラムを作りなさい。
ただし n は大きな数字(int型の限界程度)でも動くようにしなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: どちらでも可
[4] 期限: 2008年05月09日
[5] その他の制限: とくにありません
0215デフォルトの名無しさん
2008/05/07(水) 14:59:09その手元のソースが見たい
0216デフォルトの名無しさん
2008/05/07(水) 14:59:440217デフォルトの名無しさん
2008/05/07(水) 15:09:38#include <stdio.h>
#include <string.h>
int main(int argc, char *args[]) {
char buf[12];
int i;
for (i = 1; i <= 10000; i++) {
sprintf(buf, "%d", i);
if ((i % 3 == 0) || (strstr(buf, "3") != NULL)) {
printf("%d!\n", i);
} else {
printf("%d\n", i);
}
}
}
0218デフォルトの名無しさん
2008/05/07(水) 15:12:59#include <stdio.h>
#include <string.h>
int main(int argc, char *args[]) {
int N = 10000;
int count = 0;
char buf[12];
int i;
for (i = 1; i <= N; i++) {
sprintf(buf, "%d", i);
if ((i % 3 == 0) || (strstr(buf, "3") != NULL)) {
count++;
}
}
printf("%d\n", count);
}
0219デフォルトの名無しさん
2008/05/07(水) 15:18:32ググったらこれO(n)でできるらしい。
古典的な問題として有名らしい。
http://www.prefield.com/algorithm/string/manacher.html
にあった。
よくこんな事思い付くよな。
0220デフォルトの名無しさん
2008/05/07(水) 15:24:21それは違う問題。
最長回文問題は「部分文字列(substring)」を求める問題なので、
>>84 とは違う。84 で求めるのは「部分列(subsequence)」。
substring は連続する部分列で、subsequence は連続しなくてよい。
0221デフォルトの名無しさん
2008/05/07(水) 15:24:57#include <stdio.h>
#include <string.h>
int main()
{
int i;
char n[4];
for(i = 1; i < 1000; i++){
sprintf(n,"%d",i);
if(i % 3 == 0 || strchr(n,'3'))
printf("%s%c\n",n,'!');
else
printf("%s\n",n);
}
return 0;
}
0222デフォルトの名無しさん
2008/05/07(水) 15:25:49あ、ほんとだアリガト
0223デフォルトの名無しさん
2008/05/07(水) 15:35:46#include <stdio.h>
int main(void)
{
int i;
for(i=0;i<=9999;i++)
{
printf("%d,%c\n",i+1,((i+1)%3 == 0) ? '!': ' ');
}
return 0;
}
0224デフォルトの名無しさん
2008/05/07(水) 15:37:3513 でも ! をつけないと
0225デフォルトの名無しさん
2008/05/07(水) 15:39:260226デフォルトの名無しさん
2008/05/07(水) 15:43:09(2)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
int BuffSize(int n)
{
int num = n;
int size=0;
while(num){
num /= 10;
size++;
};
return ++size;
}
int main()
{
int i,n;
char *nstr;
printf("%dまでの数値を入力\n",INT_MAX);
scanf("%d",&n);
nstr = malloc(sizeof(char)*(BuffSize(n)));
for(i = 1; i < n; i++){
sprintf(nstr,"%d",i);
if(i % 3 == 0 || strchr(nstr,'3')) printf("%s%c\n",nstr,'!');
else printf("%s\n",nstr);
}
free(nstr);
return 0;
}
0227デフォルトの名無しさん
2008/05/07(水) 15:46:400228デフォルトの名無しさん
2008/05/07(水) 16:01:12[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6459.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:わかりません
[3.3] 言語:C++
[4] 期限:5月9日
[5] その他の制限:できる限り簡単なソースで作成
本当に全くわからないので,よろしくお願いします.
0229デフォルトの名無しさん
2008/05/07(水) 16:10:28・西暦紀元1年1月1日からの日数計算は、グレゴリウス暦で行うの? その場合、厳密な意味での日数とは違ってくるけど。
・星座の基準は? これまた厳密には星座の境界は毎年変わるのだけど。
・グラフィック表示の手段は? Windowsだから適当な方法で表示するだけならできるだろうけれど、授業中に指示されていない?
0230デフォルトの名無しさん
2008/05/07(水) 16:12:20これは厳しい
0231デフォルトの名無しさん
2008/05/07(水) 16:19:31・西暦紀元1年1月1日からの日数計算は、グレゴリウス暦で行うの? その場合、厳密な意味での日数とは違ってくるけど。
たぶん,下に書かれている
1年365日
ただし、4で割り切れる年は一般にうるう年(366日)
また、100で割り切れ、かつ400で割り切れない年は365日
を利用して作るのだと考えているので,グレゴリウス暦は関係ないと思います.
まぎらわしくてすみません.
・星座の基準は? これまた厳密には星座の境界は毎年変わるのだけど。
・グラフィック表示の手段は? Windowsだから適当な方法で表示するだけならできるだろうけれど、授業中に指示されていない?
この2つは全く指示されていません.個人個人で考えてくるのでしょうか?
□月□日から△月△日生まれの人・・・○○座
と考えていくと思うので,厳密には考えなくていいと思います.
グラフィックも全く指示されていません,というか
まだこういったグラフィックを作るプログラムも習っていないので
>>229さんがいうような適当な方法でいいと思います.
まぎらわしい文章で本当にすみません.
0232デフォルトの名無しさん
2008/05/07(水) 16:25:58#include <stdio.h>
#include <limits.h>
int main() {
char buff[32];
int i, j, n = 0;
for (i = 0; i < INT_MAX; i++) {
if (i % 3 == 0) {
n++;
} else {
/*sprintf(buff,"%d", i);
if (strchr(buff, '3')) n++;*/
for (j = i; 0 < j; j /= 10) {
if (j % 10 == 3) {
n++;break;
}
}
}
}
printf("%d\n", n);
return 0;
}
/*
1590383305
real 4m7.016s
user 4m5.186s
sys 0m0.108s
四分w
*/
0233デフォルトの名無しさん
2008/05/07(水) 16:33:470234デフォルトの名無しさん
2008/05/07(水) 16:34:47・星座について
3/21 - 4/19 の間に生まれた人・・・おひつじ座
4/20 - 5/20 の間に生まれた人・・・おうし座
5/21 - 6/21 の間に生まれた人・・・ふたご座
6/22 - 7/22 の間に生まれた人・・・かに座
7/23 - 8/22 の間に生まれた人・・・しし座
8/23 - 9/22 の間に生まれた人・・・おとめ座
9/23 - 10/23 の間に生まれた人・・・てんびん座
10/24 - 11/21 の間に生まれた人・・・さそり座
11/22 - 12/21 の間に生まれた人・・・いて座
12/22 - 1/19 の間に生まれた人・・・やぎ座
1/20 - 2/18 の間に生まれた人・・・みずがめ座
2/19 - 3/20 の間に生まれた人・・・うお座
という区別でいいと思います.
0235デフォルトの名無しさん
2008/05/07(水) 16:38:17いつかのFizzBazブームといっしょw
0236232
2008/05/07(水) 16:40:06(2)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
int BuffSize(int n)
{
int num = n;
int size=0;
while(num){
num /= 10;
size++;
};
return ++size;
}
int main()
{
int i,n,nabeatu=0;
char *nstr;
printf("%dまでの数値を入力\n",INT_MAX);
scanf("%d",&n);
nstr = malloc(sizeof(char)*(BuffSize(n)));
for(i = 1; i < n; i++){
sprintf(nstr,"%d",i);
if(i % 3 == 0 || strchr(nstr,'3')){ printf("%s%c\n",nstr,'!'); nabeatu++;}
else printf("%s\n",nstr);
}
free(nstr);
printf("ナベアツ日%d\n",nabeatu);
return 0;
}
0237デフォルトの名無しさん
2008/05/07(水) 18:34:30{
int repetition; /* 膨張処理の回数 */
int counter; /* 近傍中の図形画素の数 */
int p_x, p_y; /* 近傍の(x,y)座標 */
int i, x, y, m, n; /* ループ変数 */
x_size2 = x_size1; y_size2 = y_size1;
for ( y = 0; y < y_size2; y ++ )
for ( x = 0; x < x_size2; x ++ )
image2[y][x] = image1[y][x];
printf("2値画像の8近傍膨張処理を行います.\n");
printf("膨張処理を行う回数 = ");
scanf("%d", &repetition);
for ( i = 0; i < repetition; i ++ ){
for ( y = 0; y < y_size1; y ++ ){
for ( x = 0; x < x_size1; x ++ ){
if ( image1[y][x] == 0 ){
counter = 0;
0238デフォルトの名無しさん
2008/05/07(水) 18:35:20counter = 0;
for ( m = -1; m < 2; m ++ ){
for ( n = -1; n < 2; n ++ ){
p_x = x + n;
p_y = y + m;
if ( p_x > 0 && p_x < x_size1 &&
p_y > 0 && p_y < y_size1 &&
image1[p_y][p_x] == MAX_BRIGHTNESS )
counter ++;
}
}
if ( counter > 0 )
image2[y][x] = MAX_BRIGHTNESS;
}
}
}
for ( y = 0; y < y_size2; y ++ )
for ( x = 0; x < x_size2; x ++ )
image1[y][x] = image2[y][x];
}
}
0239デフォルトの名無しさん
2008/05/07(水) 18:38:10大丈夫、そのままC++でコンパイルできる。
つーか、>1嫁。
0240デフォルトの名無しさん
2008/05/07(水) 19:26:28[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6461.zip
[3] 環境
[3.1] OS:XP Pro
[3.2] コンパイラ名とバージョン: Microsoft Visual Studio .NET 2003
[3.3] 言語: C++
[4] 期限: 5月7日23時59分まで
[5] その他の制限: 式を導出してプログラムに当て嵌めるだけなので、特に制限はありません。
基礎的な問題で大変申し訳ないです。
どなたか、ご教授願えませんでしょうか。
0241デフォルトの名無しさん
2008/05/07(水) 19:41:150242デフォルトの名無しさん
2008/05/07(水) 19:42:53つ数学板
0243デフォルトの名無しさん
2008/05/07(水) 19:44:560244デフォルトの名無しさん
2008/05/07(水) 20:06:14とりあえずそのグラフを見ただけでは数式は導出できない。
どういう文脈で出題された課題か、とかそういうことが色々無いと
とても解ける課題ではない。
0245デフォルトの名無しさん
2008/05/07(水) 20:12:36グラフだけから式を導出とかw
0246デフォルトの名無しさん
2008/05/07(水) 20:22:58問題のとらえ方次第だけど、削除する文字列が連続する1か所のみだったりしないのかな?
長さxの文字列からy~zの部分を削除した文字列が対象(0 <= y <= z <= x)
問題文と例を見る限りでは、任意の文字を削除できるとも考えられちゃうけど、そうじゃないとすれば
>>209よりかはパターンは少なくなるよね?それでもmax100000なら膨大だろうけど・・・
max100000は2進数表記でしたみたいなオチとかにならないかな。
0247デフォルトの名無しさん
2008/05/07(水) 20:23:04ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6463.c
0248240
2008/05/07(水) 20:28:16理不尽な要求を出して大変申し訳ないですw
グラフについてですが、画像の濃度値を表すグラフなので、
最小値0から最高値は255になるようです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6462.zip
自分自身全然理解出来ていないので、
上手く説明出来なくて大変申し訳ないのですが、
簡単な例を挙げるとこうなるようです。
2番目の図2.5(b)は
z=zm・z'^2/zm^2
z'^2=zm・z
z=√zm・z
と導出出来るようです。
先ほどの問題はこの2つを合わせた式を導出し、
プログラムを作成せよという事になると思うのですが、
導出過程がわからず、混乱してしまったので質問させていただきました。
どうか宜しくお願いします。
0249デフォルトの名無しさん
2008/05/07(水) 20:34:34数学板の質問系スレで
画像ファイルのようなグラフで
できるだけ簡単なものを探しています
がどんなものでしょうか?
と聞くと多分答えてくれる。
0250デフォルトの名無しさん
2008/05/07(水) 20:40:36他に聞けるようなスレがなかったため、
申し訳ないですがここで質問させてください。
【質問テンプレ】
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク)
ポイントを用いた線形リストデータ構造を利用して、
キーボードから順に入力した複数の整数値(int型)を、
空の「スタック」および「キュー」にそれぞれ保存し、
取り出した時、出力される整数値を順に表示するプログラム、
pointlist.cを作成せよ。
また動作確認の結果も報告せよ。
動作確認のために入力する整数値は、作成した日付を入力せよ。
(例、2008年5月11日に作成したならば、
スタックで「1→1→5→0→8→0→0→2」と、出力すること、また、
キューで「2→0→0→8→0→5→1→1」と、出力することを確認し、
動作確認の結果と、ソースファイルを提出せよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:bcc32
[3.3] 言語: C言語
[4] 期限:5/12
[5] その他の制限: 特になし
スタックとキューの理屈は理解しているのですが、
プログラムを書くとなるとどう書いてよいのかわかりません。
0251デフォルトの名無しさん
2008/05/07(水) 20:40:410252デフォルトの名無しさん
2008/05/07(水) 20:43:03imggray.h 内の関数
void non_Linear_Transform(void)
をどうこういう話は無かった?
■ このスレッドは過去ログ倉庫に格納されています