C言語 配列の中身とカウント数の連動の仕方
Posted: 2013年7月16日(火) 10:33
C言語についてです。
指定した11桁の数字を用意し、他にランダムに11桁の数字を100個用意し、
100個の11桁数列それぞれに対して、指定した11桁の数字と一致している個数をカウントするプログラムを作成しています。
その後に、一致している個数(カウント数)が大きい順に上から数列を表示するようにしたいのですが、
カウント数の並べ替えはできても数列の並べ替えができません。
文章にしてもわかりずらいと思うので、ソースを貼らせていただきます。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int i,j=0,k,l,count = 0,dumy,next[11], kouho[11],
goal[]={1,2,3,4,5,6,7,8,9,1,2},Data[101][10],Count[101];
srand((unsigned)time(NULL));
printf("GOAL ");
for(i=0;i<11;i++){
printf("%d", goal);
}
printf("\n");
for(k=1;k<101;k++){
for(i = 0; i < 11; i++)
{
kouho = rand() % 10;
}
count = 0;
printf("KOUHO%d ", k);
for(i = 0; i < 11; i++){
printf("%d",kouho);
Data[k]=kouho;
}
for(i=0;i<11;i++){
if(kouho == goal){
count = count + 1;
next = kouho;
}else{
next = rand() % 10;
}
}
printf(" %d", count);
printf("\n");
Count[k]=count;
}
for(k = 1; k < 101; k++){
for(l = k + 1; l < 101; l++){
for(k = 1; k < 101; k++){
for(l = k + 1; l < 101; l++){
if(Count[k] < Count[l]){
dumy = Count[k];
Count[k] = Count[l];
Count[l] = dumy;
}
}
}
for(k=1;k<101;k++){
for(i=0;i<11;i++){
printf("%d", Data[k][i]);
}
Count[k] = Count[l];
Count[l] = dumy;
}
}
}
for(k=1;k<101;k++){
for(i=0;i<11;i++){
printf("%d", Data[k][i]);
}
printf("\n");
for(k = 1; k < 101; k++){
for(i=0;i<11;i++){
printf("%d ",Count[k]);
printf("%d", Data[k][i]);
}
printf("\n");
for(k = 1; k < 101; k++){
printf("%d ",Count[k]);
for(i=0;i<11;i++){
printf("%d", Data[k][i]);
}
printf("\n");
}
}
return 0;
}
[/code]
今回は12345678912という数列を対象に考えました。
例として01341111111という数列がでてきたときは、3と4と後ろから2番目の1の一致でカウント数3
となります。
このように100個発生させ、すべてカウントしていき、カウントが多い順に数列を並べ替えさせたいです。
どの部分を改良すればよいのか教えてほしいと思い、投稿しました。
よろしくお願いいたします。
指定した11桁の数字を用意し、他にランダムに11桁の数字を100個用意し、
100個の11桁数列それぞれに対して、指定した11桁の数字と一致している個数をカウントするプログラムを作成しています。
その後に、一致している個数(カウント数)が大きい順に上から数列を表示するようにしたいのですが、
カウント数の並べ替えはできても数列の並べ替えができません。
文章にしてもわかりずらいと思うので、ソースを貼らせていただきます。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int i,j=0,k,l,count = 0,dumy,next[11], kouho[11],
goal[]={1,2,3,4,5,6,7,8,9,1,2},Data[101][10],Count[101];
srand((unsigned)time(NULL));
printf("GOAL ");
for(i=0;i<11;i++){
printf("%d", goal);
}
printf("\n");
for(k=1;k<101;k++){
for(i = 0; i < 11; i++)
{
kouho = rand() % 10;
}
count = 0;
printf("KOUHO%d ", k);
for(i = 0; i < 11; i++){
printf("%d",kouho);
Data[k]=kouho;
}
for(i=0;i<11;i++){
if(kouho == goal){
count = count + 1;
next = kouho;
}else{
next = rand() % 10;
}
}
printf(" %d", count);
printf("\n");
Count[k]=count;
}
for(k = 1; k < 101; k++){
for(l = k + 1; l < 101; l++){
for(k = 1; k < 101; k++){
for(l = k + 1; l < 101; l++){
if(Count[k] < Count[l]){
dumy = Count[k];
Count[k] = Count[l];
Count[l] = dumy;
}
}
}
for(k=1;k<101;k++){
for(i=0;i<11;i++){
printf("%d", Data[k][i]);
}
Count[k] = Count[l];
Count[l] = dumy;
}
}
}
for(k=1;k<101;k++){
for(i=0;i<11;i++){
printf("%d", Data[k][i]);
}
printf("\n");
for(k = 1; k < 101; k++){
for(i=0;i<11;i++){
printf("%d ",Count[k]);
printf("%d", Data[k][i]);
}
printf("\n");
for(k = 1; k < 101; k++){
printf("%d ",Count[k]);
for(i=0;i<11;i++){
printf("%d", Data[k][i]);
}
printf("\n");
}
}
return 0;
}
[/code]
今回は12345678912という数列を対象に考えました。
例として01341111111という数列がでてきたときは、3と4と後ろから2番目の1の一致でカウント数3
となります。
このように100個発生させ、すべてカウントしていき、カウントが多い順に数列を並べ替えさせたいです。
どの部分を改良すればよいのか教えてほしいと思い、投稿しました。
よろしくお願いいたします。