#include <iostream>
#include <algorithm>
using namespace std;

int main ()
{
int a[1005];
int t;
scanf ( "%d", &t );
while ( t -- )
{
int n;
scanf ( "%d", &n );
for ( int i = 0; i < n; i ++ )
{
scanf ("%d", &a[i]);
}
sort ( a, a + n );
printf ("%d", a[0]);
for ( int i = 1; i < n; i ++ )
{
printf (" %d",a[i]);
}
printf ("\n");
}
//system ("pause");
return 0;
}

簡單的排序題,直接利用sort默認的排序規則:升序排列
posted @
2010-09-06 21:19 雪黛依夢 閱讀(304) |
評論 (0) |
編輯 收藏
為啥少了一個else 就錯了呢?
//顯然數據范圍非常的大,測試a[10000]時已經無法正確的表示了
//要用用相關的知識進行處理 : ( a + b ) % 3 = ( a % 3 + b % 3) % 3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int a[1000009];

int main ()
{
int n;
a[0] = 7 % 3;
a[1] = 11 % 3;
for ( int i = 2; i < 1000009; i ++ )
{
a[i] = ( a[i - 1] + a[i - 2] ) % 3;
}
while ( scanf ("%d", &n) != EOF )
{
if ( !a[n] )
printf ("yes\n");
else
printf ("no\n");
}
//system ("pause");
return 0;
}

posted @
2010-09-06 21:06 雪黛依夢 閱讀(298) |
評論 (0) |
編輯 收藏
這是一道簡單的數論知識題,即 a * b = gcd (a , b) * lcm (a, b);
但是這里要注意一下如何求多個數的lcm 因為易在只有一個數的時候發生錯誤
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int a[100000];

int gcd ( int a, int b)
{
if ( b == 0 )
return a;
else
return gcd ( b, a % b );
}

int lcm ( int a, int b )
{
return a / gcd ( a, b )* b;
}

int main ()
{
int t, m;
scanf ( "%d", &t);
while ( t -- )
{
int temp;
scanf ("%d", &m);
//輸入數據
for ( int i = 0; i < m; i ++)
{
scanf ("%d", &a[i]);
}
//求值
temp = a[0];
for ( int i = 1; i < m; i ++)
{
temp = lcm ( temp , a[i]);
}
printf ("%d\n", temp);
}
system ("pause");
return 0;
}

posted @
2010-09-06 20:31 雪黛依夢 閱讀(558) |
評論 (0) |
編輯 收藏

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

int main ()

{

int N;

scanf ("%d", &N );

for ( int i = 0; i < N; i ++ )

{

//輸出之間存在空行

if (i)

printf ("\n");

int m, n;

int num = 0; //記錄看這是第幾組數
while ( scanf ("%d %d", &n, &m), m || n ) //水題也WA 了好多次就是這里錯了

{

num ++;

int count = 0; //用于記錄滿足條件的 a b 整數對

for ( int a = 1; a < n; a ++ ) // b

{

for ( int b = a + 1; b < n; b ++ ) // a

{

if ( (a * a + b * b + m) % ( a * b ) == 0 )

count ++;

}

}

printf ("Case %d: %d\n", num, count);

}

}

//system ("pause");

return 0;

}

posted @
2010-09-04 13:26 雪黛依夢 閱讀(470) |
評論 (0) |
編輯 收藏
水題:只是格式好容易錯的,像那個是從25 行輸出,我的就變成了26
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int a[100000];
int main ()
{
int step, mod;
while ( scanf ("%d %d", &step, &mod) != EOF )
{
a[0] = 0;
a[1] = ( a[0] + step) % mod;
int k = 1;
while ( a[k] != 0 )
{
k ++;
a[k] = ( a[k - 1] + step ) % mod;
}

if ( k == mod )
printf ("%10d%10d Good Choice\n", step, mod);
else
printf ("%10d%10d Bad Choice\n",step, mod);
printf ("\n");
}
//system ("pause");
return 0;
}

posted @
2010-09-03 20:50 雪黛依夢 閱讀(296) |
評論 (0) |
編輯 收藏
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int f ( int n )
{
int product = 1;
for ( int i = 1; i <= n; i ++ )
{
product *= i;
}
return product;
}

int main ()
{
double a[10];
a[0] = 1;
for ( int i = 1; i < 10; i ++ )
{
a[i] = 1.0 / f (i); //求階層的倒數
}

double sum[10];
sum[0] = 1;
for ( int i = 1; i < 10; i ++ )
{
sum[i] = sum[i - 1] + a[i]; //求和
}
printf ("n e\n");
printf ("- -----------\n");
printf ("0 1\n");
printf ("1 2\n");
printf ("2 2.5\n");
for ( int i = 3; i < 10; i ++)
{
printf ("%d %.9f\n", i, sum[i]);
}
system ("pause");
return 0;
}

posted @
2010-09-03 19:15 雪黛依夢 閱讀(283) |
評論 (0) |
編輯 收藏
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main ()
{
int a[1000];
int n;
while ( scanf ("%d", &n) && n )
{
a[0] = 0;
for ( int i = 1; i <= n; i ++ )
{
scanf ("%d", &a[i]);
}
int sum = 0;
for ( int i = 1; i <= n; i ++ )
{
if ( a[i] > a[i - 1] )
{
sum += (a[i] - a[i - 1]) * 6 + 5;
}
else if ( a[i] < a[i - 1])
{
sum += (a[i - 1] - a[i]) * 4 + 5;
}
else
{
sum += 5;
}
}
printf ("%d\n", sum);
}
system ("pause");
return 0;
}

posted @
2010-09-03 18:37 雪黛依夢 閱讀(232) |
評論 (0) |
編輯 收藏

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

int main ()

{

int n;

char str[10000];

while ( scanf ("%d", &n) != EOF && n )

{

getchar ();

for ( int i = 0; i < n; i ++ )

{

scanf ("%s", &str);

int len = 0;
while ( str[len] != '\0') //錯點

len ++;

int index = 0;

while ( index < len )

{

int count = 1;

if ( str[index] != str[index + 1] )

{

printf ("%c", str[index]);

index ++;

}

else

{

count ++;
while (str[index] == str[ index + count]) //錯點:是 == 
count ++;

printf ("%d%c", count, str[index]);

index += count;

}

}

printf ("\n");

}

}


return 0;

}

posted @
2010-09-03 11:50 雪黛依夢 閱讀(414) |
評論 (0) |
編輯 收藏
這道題的處理方法是把待處理的字符數組邊界設為空格作為出口的標志,另設一個記錄所走步數的數組steps,但是這個題目分兩個走法,其一沒有重復的路徑,遇到空格后直接輸出的步數,用mark = 0標記; 另一種情況就是出現了重復的路徑也就是題目中if ( steps[curi][curj] != 0 )即下一步是已經走了的路徑,那么這必然是循環的開始,根據記錄的step和下一個step值之間的關系就可以輸出
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main ()
{
char map[13][13];
int steps[13][13];
int num, col, start;
while ( scanf ("%d %d %d", &num, &col, &start ) != EOF && ( num != 0 && col != 0 && start != 0 ) )
{
getchar ();
memset (map, 0, sizeof(map) );
memset (steps, 0, sizeof(steps) );
for ( int i = 0; i < col + 2; i ++ )
{
map[0][i] = ' ';
map[num + 1][i] = ' ';
}
for ( int i = 0; i < num + 2; i ++ )
{
map[i][0] = ' ';
map[i][col + 1] = ' ';
}
for ( int i = 1; i <= num; i ++)
{
for ( int j = 1; j <= col; j ++ )
{
scanf ("%c", &map[i][j]);
}
getchar ();
}
int step = 1;
int curi = 1; int curj = start;
int mark = 0;
int temp = 1; int t = 0;
while ( map[curi][curj] != ' ' )
{
if ( steps[curi][curj] != 0 )
{
temp = step;
t = steps[curi][curj];
mark = 1;
break;
}
else
{
steps[curi][curj] = step;
if ( map[curi][curj] == 'N' )
{
curi = curi - 1;
curj = curj;
}
else if ( map[curi][curj] == 'S' )
{
curi = curi + 1;
curj = curj;
}
else if ( map[curi][curj] == 'W' )
{
curi = curi;
curj = curj - 1;
}
else if ( map[curi][curj] == 'E' )
{
curi = curi;
curj = curj + 1;
}
step ++;
}
}
if ( mark == 0 )
printf ("%d step(s) to exit\n", step - 1 );
else
printf ("%d step(s) before a loop of %d step(s)\n", t - 1, temp - t );
}
//system ("pause");
return 0;
}

posted @
2010-08-30 15:28 雪黛依夢 閱讀(373) |
評論 (0) |
編輯 收藏
#include <stdio.h>
#include <stdlib.h>
#define MAX 1001
#define OK 1

int tag[MAX]; //將出現了等號的(即真幣)排除 標記為1 遍歷時跳過
int num[MAX]; //記錄下標為i的硬幣在不等式的兩邊出現的次數

int main ()
{
int coin[MAX]; //訪問時下標的中介
int N, k, pi, count ;
char c;
while ( scanf ("%d%d", &N, &k) != EOF )
{
count = 0; //記錄接下來的 k 次稱量中有多少次出現了不等號
for ( int i = 0; i < k; i ++) // k 次的稱量記錄
{
scanf ("%d", &pi);
for (int j = 0; j < 2 * pi; j ++)
{
scanf ("%d", &coin[j]);
}
getchar ();
c = getchar ();
for (int i = 0; i < 2 * pi; i ++)
{
if (c == '=')
tag[coin[i]] = 1;
else if (c == '<')
{
count ++;
for (int j = 0; j < pi; j ++)
{
num[coin[j]]--;
}
for (int j = pi; j < 2 * pi; j++)
{
num[coin[j]]++;
}
}
else
{
count ++;
for (int j = 0; j < pi; j ++)
{
num[coin[j]]++;
}
for (int j = pi; j < 2 * pi; j++)
{
num[coin[j]]--;
}
}
}
}
int mark = 0;
int temp ;
for (int i = 1; i <= N; i ++)
{
if (tag[i] == 1) //表示為真幣,不可能
continue;
if (num[i] == count || num[i] == -count) //如果硬幣在不等式的兩邊出現的次數等于不等號數為假幣
{
mark ++;
temp = i;
}
}
if (mark == 1) // 假幣只有一個
{
printf ("%d\n", temp);
}
else
printf ("%d\n",0);
}
return 0;
}

posted @
2010-08-29 11:49 雪黛依夢 閱讀(445) |
評論 (0) |
編輯 收藏