• ベストアンサー

配列

整数n(n>0)を、k進法(1<k<10)で表すにはどうしたらよいのでしょうか?ちなみにnとkは両方とも入力できるようにして、k進法に変換した結果は配列に記憶してから、その配列を表示したいのですが。 それとは別に、各月の日数を記憶する配列を用意し、初期化で各月の日数を記録させ、a月b日からc月d日まで行われる催事の開催期間(日数)を求めたいです。 a月とc月は同じ年で、閏年はありません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

こんにちは k進法(2≦k≦36)での表示です。 sample(int k,int n) {   int i ;   char c[48] ;   if ( k < 2 || k > 36 ){     printf("Error");     return ;   }   i = 0 ;   while ( n ){     if ( n%k < 10 ){       c[i] = n%k+'0' ;     } else {       c[i] = n%k-10+'A' ;     }     i ++ ;     n /= k ;   }   while ( i ){     i -- ;     putchar(c[i]);   } } 日数を求めます。(エラー判定していません。) day[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; int sample(int a,int b,int c,int d) {   int total,i ;   if ( a == c ){     total = d-b+1 ;   } else {     total = day[a-1]-b+1+d ;     for (i=a+1; i<c ;i++){       total += day[i] ;     }   }   return total ; }  デバッグしていませんが、こんな所だと思います。

inversezero
質問者

お礼

なかなか難しいものですね。どうもありがとうございました。

その他の回答 (1)

回答No.2

> それとは別に、各月の日数を記憶する配列を用意し、初期化で各月の日数を記録させ、a月b日からc月d日まで行われる催事の開催期間(日数)を求めたいです。 各月の日数を格納した配列を days[12] としましょうか。 ここで、 days[i] = days[0] + days[1] + ... + days[i]; という計算、つまり1月1日からの積算日数に変換します。 この配列があれば、ある日の元旦からの経過日数が求まります。 a月b日とc月d日それぞれの元旦からの経過日数を求め、その差をとればいいでしょう。

inversezero
質問者

お礼

親切な回答どうもありがとうございました。

関連するQ&A

  • 配列の問題

    学校の宿題でできないのが出てきました(´-ω-`) 誰か教えてください。 大きさn(0~n-1)の配列a,bと大きさ2n(0~2n-1)の配列cがあり、今配列cに整数データが格納されているとする。このとき、cの奇数列をaに、偶数列をbに取り出せ。

  • C言語の問題です

    うるう年も含めて、西暦年における各月の日数を表示せよ。 キーボードからの入力は、年と月、の2つの値。 例 2007 6   2007 2   2000 2   2100 2 画面にはその月の日数を表示する。 例 入力が 2007 6 に対して、画面に 「2007年6月の日数は30である」 と表示する。 間違って入力に対しては、再入力を促すようにすること。 プログラムに配列を必ず使うこと。 ソースプログラムと実行画面のコピーをWordファイルに貼り付けて提出すること。 うるう年の表示と年を選ばせることができません。 助けてください!

  • 配列の使い方がわかりません

    n=1~20 s=n(n+1)(2n+1)(3n^2+3n-1)/30 のsの結果を数表にする問題で、 n  s    n   s   1  _   11 _ 2  _  12 _ ・      ・ ・      ・ ・      ・ 10 _  20  _ というような表示をしたくて、配列を用いてしてるんですが、うまくいきません。どなたか、教えてください。 public class suuhyou{ public static void main(String[] args){ int a=0,b=0,c=0,d=0,s=0; int[] x = new int[50]; for(int n=1;n<=50;n++){ a = n; b = n + 1; c = 2 * n + 1; d = 3 * n * n + 3 * n - 1; s = a * b * c * d / 30; int x[n] = s; } for(int k=1;k<=10;k++){ System.out.print ( k + ":" + x[k] +","); System.out.print ((k+10) + ":" + x[k+10]+","); System.out.print ((k+20) + ":" + x[k+20]+","); System.out.print ((k+30) + ":" + x[k+30]+","); System.out.println((k+40) + ":" + x[k+40]); } } } 自分でやっていたら、最後はこんな風にだんだんめちゃくちゃになってしまいました。このときはnが50まででやってます。お願いします。

  • 数学の答案過程、答案、解答をお願いします

    数学の途中過程、答案、解答をよろしくお願いします 五進法で表した時にどの桁にも3があらわれない、0以上の整数を小さい順にa1,a2,a3, ・・・とする。 (例えば a8=9となる)また、S(N)=Σak(k=1からN)とおく。なお、0以上の整数nを五進法で表すとは、n=ck5^k+c(k-1)5^(k-1)+・・・+c1×5+c0(ただし、各ciは0,1,2,3,4のいずれか)と表したときのciを並べてckc(k-1)・・・c1c0[5]の形に書くことをいう。 1)S(64)を求めよ 2)nを自然数とする。S(4^n)が26の倍数になるための必要十分条件を求めよ

  • C言語でのカレンダープログラミングについて。

    今、C言語でカレンダーについてのプログラミングを行っています。 まず月を入力し表示させる。 その年がうるう年かどうか判定させる。 日曜~土曜を表示し、指定した月の日数を曜日に合わせて表示させる。 2008年1月1日は火曜日。 という事実を利用してよい。 という条件で、うるう年かの判定はあるものの年は2008年で固定です。 曜日、指定した月の日数を出すところまでいきましたが。 曜日に合わせて出す事ができません。 今は1月に合わせて、1日が火曜日のところに出るように配置してます。 が、次の週になったときにどのように改行指定すればいぃのかわりません。 また、来月以降の月初めの曜日指定もわからないです。 途中までのプログラムはこれです。 醜いかもしれませんが。 #include <stdio.h> int main(void) { int year=2008; int month,hantei=0,a,b,c; int uru[12]={31,29,31.30,31,30,31,31,30,31,30,31};/*うるう年の時の各月ごとの日数*/ int normal[12]={31,28,31,30,31,30,31,31,30,31,30,31};/*通常の年の各月ごとの日数*/ printf("表示させる月を入力してください。:"); scanf("%d",&month); if(year%4==0||year%100==0||year%400==0) { hantei=1;/*その年がうるう年かどうかを判定し、うるう年なら「hantei」に「1」が代入*/ } if(hantei==1)/*うるう年の場合。*/ { printf("%d年 %d月\n",year,month); printf("%d日\n",uru[month-1]); } else/*通常の年の場合。*/ { printf("%d年 %d月\n",year,normal[month-1]); printf("%d\n",normal[month-1]); } printf("日 月 火 水 木 金 土\n");/*曜日*/ if(hantei==1)/*うるう年の場合*/ { for(b=0;b<=7;b++) { printf(" ");/*火曜日のところまでスペースを空ける*/ } for(c=1;c<=uru[month-1];c++)/*日数表示*/ { printf("%2d ",c); } } return(0); } まだあまりC言語に詳しくないので、簡単に説明できる範囲で御願いします。 説明がわかりにくいかもしれませんが、すいません。

  • 整数の選択

    アルゴリズムに関する質問です. n個の相異なる整数が配列 A[1..n] に格納されていて,その配列の中からk番目に小さい整数を選ぶ問題のアルゴリズムを考えています.kは 1<=k<=n を満たす自然数であり,この選択問題は O(n) で解けるものです. ヒープを使ったりして考えたのですがうまくいきません.どなたかこのアルゴリズムを教えてください.よろしくお願いします.

  • 配列を使って魔方陣

    C言語を使って最近やっと配列ができるようになってきたんですが、どうしても魔方陣のやり方がわからないんです。教えてください。 魔方陣とは、1~n^2までの整数をn×nの正方形に並べ、どの行、どの列、どの対角線のn個の数の和も一定の値になるようにしたものです。 nは常に奇数を入力し、1番上の行の中央の列に1を置く事になります。 整数kまで置かれているとすると、k+1は次のように置かれる。 * kの置かれた場所の右斜め上(以下この場所をαと呼ぶ)が空いていれば、そこにk+1を置く。 * αがすでに他の数が置かれているとき、kの置かれている場所のすぐ下にk+1を置く。 * αが右上隅にはみ出す場合は、kの置かれている場所のすぐ下にk+1を置く。 * αが1番上の行からはみ出す場合は、場所αの1番下の列にk+1を置く。 * αが1番右上の列からはみ出す場合には、場所αの1番左の列にk+1を置く。 例)n=3のとき 8 1 6 3 5 7 4 9 2 まだまだ初心者なので詳しく教えていただけると嬉しいです。よろしくお願いします。

  • 証明

    何度も失礼します。 問題は、a,b,cはどの2つも1以外の共通な約数を持たない正の整数とする。a,b,cが、a^2+b^2=c^2を満たしているとき、次の問いに答えよ。 (cは奇数である) (1)a,bの1つは4の倍数であることを示せ。 証明は、cは奇数であるから、,bのうちいずれか一方は偶数で、他方は奇数である。いま、偶数の方をaとしてもよい。aが4の倍数でないと仮定すると、a=4k+2,b=4m±1,c=4n±1(k,m,nは整数)とおける。 a^2+b^2=(4k+2)^2+(4m±1)^2 =8(2k^2+2k+2m^2±m)+5 c^2=(4n±1)^2=8(2n^2±n)+1 よってあまりが違い、矛盾するので正しい。 となっているのですが、{a=4k+2,b=4m±1,c=4n±1(k,m,nは整数)}ですが一つ目の疑問は(k,m,nは整数)ですが、整数では、例えばmが-3とかのとき明らかに-になるのでだめですよね?bが正の整数を大前提にということでしょうか?もうひとつは、これはb,cは奇数であることをいいたいのだからa=4k+2、b=2m-1,c=2n-1(・・・m,nは自然数)としてはいけないのでしょうか?それでもできるとおもうのですが。b=4m±1,c=4n±1である理由があるのでしょうか?

  • 【PHP】配列を連想配列に

    $m = array('a', 'b', 'c'); この配列 $m をもとに $n = array(  'a' => array(   'b' => array(    'c' => array()))); 上のような連想配列 $n をつくりたいのですが、 $n = array(  $m[0] => array(   $m[1] => array(    $m[2] => array()))); 要素の数が固定のときは、これでもいいのですが、数が変動する場合に対応できません。 何か方法があれば教えてください。

    • ベストアンサー
    • PHP
  • 合同

    整数a,bに対し、差a-bが正の整数nで割り切れる時、a,とbはnを法として合同であるという。 30を法として(2^30)と合同である整数のうち最小値の正の整数を求める問題 (2^30)-n=30N (20^30)=m(mod30)の2つの表した方が分かりません。 (2^30) =(2^5)^6 =(32)^6 =(30+2)^6 から 30K+64とさらに計算して30(K+2)+4になることが分かりません。

専門家に質問してみよう