http://www.acm.uiuc.edu/webmonkeys/book/c_guide/index2.html
2012年1月7日 星期六
2012年1月6日 星期五
ACM 10107 What is the Median?
這篇作法參考 http://mypaper.pchome.com.tw/iustlovefish/post/1311934438
#include <stdio.h>
int main()
{
int counter=0;
int input[10001]={0};
int a,i,j,temp=0;
while(scanf("%d",&a)==1)
{
for(i=0;i<=counter;i++)
if(input[i]>a)
break;
for(j=counter;j>i;j--)
input[j]=input[j-1];
input[j]=a;
counter++;
if(counter%2==0) printf("%d\n",((input[counter/2]+input[counter/2-1])/2));
else printf("%d\n",input[counter/2]);
/*for(i =0;i<counter;i++)
printf("data %d\t",input[i]); */
}
return 0;
system("pause");
}
#include <stdio.h>
int main()
{
int counter=0;
int input[10001]={0};
int a,i,j,temp=0;
while(scanf("%d",&a)==1)
{
for(i=0;i<=counter;i++)
if(input[i]>a)
break;
for(j=counter;j>i;j--)
input[j]=input[j-1];
input[j]=a;
counter++;
if(counter%2==0) printf("%d\n",((input[counter/2]+input[counter/2-1])/2));
else printf("%d\n",input[counter/2]);
/*for(i =0;i<counter;i++)
printf("data %d\t",input[i]); */
}
return 0;
system("pause");
}
2012年1月5日 星期四
ACM 10082 WERTYU
[心得] :0.004
1.要注意空白和換行的處理
2.如果是小寫,則不處理,直接輸出
#include <stdio.h>
#include <string.h>
int main()
{
char key_board[] = "=-0987654321`\\][POIUYTREWQ';LKJHGFDSA/.,MNBVCXZ";
char input[3000];
char map[3000];
int length1,length2;
while(gets(input)!=NULL)
{
int i,j,counter=0;
length1 = strlen(input);
length2 = strlen(key_board);
for(i=0;i<length1;i++)
{
for(j=0;j<length2;j++)
{
if (input[i] == 32)
{
map[i]=32;
counter++;
}
else if (input[i] == 13)
{
map[i]=13;
counter++;
}
else if(input[i]==key_board[j])
{
map[i]=key_board[j+1];
counter++;
}
}
if( counter ==0)
{
map[i] = input[i];
}
counter=0;
}
for(j=0;j<length1;j++)
{
printf("%c",map[j]);
}
printf("\n");
}
system("pause");
//return 0;
}
寫完之後看到網路上別人寫的,GOOD!
#include <stdio.h>
#include <string.h>
int main()
{
char s[50]="=-0987654321`\\][POIUYTREWQ';LKJHGFDSA/.,MNBVCXZ";
char *x;
char c;
while((c=getchar())!=EOF)
{
x=strchr(s,c);
putchar(x?s[x-s+1]:c);
}
system("pause");
return 0;
}
1.要注意空白和換行的處理
2.如果是小寫,則不處理,直接輸出
#include <stdio.h>
#include <string.h>
int main()
{
char key_board[] = "=-0987654321`\\][POIUYTREWQ';LKJHGFDSA/.,MNBVCXZ";
char input[3000];
char map[3000];
int length1,length2;
while(gets(input)!=NULL)
{
int i,j,counter=0;
length1 = strlen(input);
length2 = strlen(key_board);
for(i=0;i<length1;i++)
{
for(j=0;j<length2;j++)
{
if (input[i] == 32)
{
map[i]=32;
counter++;
}
else if (input[i] == 13)
{
map[i]=13;
counter++;
}
else if(input[i]==key_board[j])
{
map[i]=key_board[j+1];
counter++;
}
}
if( counter ==0)
{
map[i] = input[i];
}
counter=0;
}
for(j=0;j<length1;j++)
{
printf("%c",map[j]);
}
printf("\n");
}
system("pause");
//return 0;
}
寫完之後看到網路上別人寫的,GOOD!
#include <stdio.h>
#include <string.h>
int main()
{
char s[50]="=-0987654321`\\][POIUYTREWQ';LKJHGFDSA/.,MNBVCXZ";
char *x;
char c;
while((c=getchar())!=EOF)
{
x=strchr(s,c);
putchar(x?s[x-s+1]:c);
}
system("pause");
return 0;
}
2012年1月4日 星期三
C acm10071 Back to High School Physics
#include <stdio.h>
#include <stdlib.h>
int v,t,s;
int main()
{
while(scanf("%d %d",&v,&t)==2)
{
s =2*v*t;
printf("%d\n",s);
}
system("pause");
//return 0;
}
#include <stdlib.h>
int v,t,s;
int main()
{
while(scanf("%d %d",&v,&t)==2)
{
s =2*v*t;
printf("%d\n",s);
}
system("pause");
//return 0;
}
C acm 10062 Tell me the frequencies!
[心得] : //0.012
1.他測資應該有1000個,char array[1001]; 一開始只設1000,一直RE
2.
if(first)
printf("\n");
first =1; 奇怪的印出空白,這是參考網路上前輩資料
3.要用gets ,用scanf會忽略空白
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char array[1001];
int first=0;
while(gets(array)!=NULL)
{
int number[256]={0};
int length;
int i,j;
if(first)
printf("\n");
first =1;
length =strlen(array);
for(i =0;i<length;i++)
{
number[array[i]]++;
}
for(i=1;i<=length;i++)
{
for(j=255;j>0;j--)
{
if(number[j]==i)
{
printf("%d %d\n",j,i);
}
}
}
}
system("pause");
//return 0;
}
1.他測資應該有1000個,char array[1001]; 一開始只設1000,一直RE
2.
if(first)
printf("\n");
first =1; 奇怪的印出空白,這是參考網路上前輩資料
3.要用gets ,用scanf會忽略空白
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char array[1001];
int first=0;
while(gets(array)!=NULL)
{
int number[256]={0};
int length;
int i,j;
if(first)
printf("\n");
first =1;
length =strlen(array);
for(i =0;i<length;i++)
{
number[array[i]]++;
}
for(i=1;i<=length;i++)
{
for(j=255;j>0;j--)
{
if(number[j]==i)
{
printf("%d %d\n",j,i);
}
}
}
}
system("pause");
//return 0;
}
acm 10038 Jolly Jumpers
[心得] : 0.008
測試資料5 -3 1 -2 0 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
while(scanf("%d",&a)==1)
{
int i;
int flag =1;
int array[4000]={0};
int map[4000]={0};
int differ;
for(i =1;i<=a;i++)
scanf("%d",&array[i]);
for(i=1;i<a;i++)
{
differ = abs(array[i+1]-array[i]);
if(differ >=a ||differ<1 || map[differ])
{
flag=0;
printf("Not jolly\n");
break;
}
else
map[differ] =1;
}
if(flag)
printf("Jolly\n");
}
return 0;
}
測試資料5 -3 1 -2 0 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
while(scanf("%d",&a)==1)
{
int i;
int flag =1;
int array[4000]={0};
int map[4000]={0};
int differ;
for(i =1;i<=a;i++)
scanf("%d",&array[i]);
for(i=1;i<a;i++)
{
differ = abs(array[i+1]-array[i]);
if(differ >=a ||differ<1 || map[differ])
{
flag=0;
printf("Not jolly\n");
break;
}
else
map[differ] =1;
}
if(flag)
printf("Jolly\n");
}
return 0;
}
2012年1月2日 星期一
C about -- memset(matrix, 0, sizeof(matrix))
可以用於陣列初始化:
例如: 宣告三個陣列
#define MAXSIZE 8
int map[MAXSIZE+1];
int left[2*MAXSIZE+1];
int right[2*MAXSIZE+1];
方法一
memset(map, 0, sizeof(map));
memset(left, 0, sizeof(left));
memset(right,0, sizeof(right));
方法二
memset(map, 0, sizeof(int)*(MAXSIZE+1));
memset(left, 0, sizeof(int)*(2*MAXSIZE+1));
memset(right,0, sizeof(int)*(2*MAXSIZE+1));
需要注意的是 ,不可以使用memset初始化為1
memset(matrix, 1, sizeof(matrix)); //會失敗
memset(matrix, -1, sizeof(matrix)); //OK
memset(matrix, 0, sizeof(matrix));//OK
memset為字元填入的函式,整數由2或4個位元組(字元)組成
設定的值是0x01,但存入的值卻是0x0101,而導致錯誤的答案
而-1則是0xFF,存入的值是0xFFFF,不會影響答案
#include <stdio.h>
int matrix[5][5];
void init_matrix()
{
//設定陣列內的值全為-1
memset(matrix, 1, sizeof(matrix));
}
int main()
{
int i,j;
init_matrix();
for(i=0;i< 5;i++){
for(j=0;i< 5;i++)
printf("matrix[%d][%d] =%d\n",i,j,matrix[i][j]);
}
system("pause");
例如: 宣告三個陣列
#define MAXSIZE 8
int map[MAXSIZE+1];
int left[2*MAXSIZE+1];
int right[2*MAXSIZE+1];
方法一
memset(map, 0, sizeof(map));
memset(left, 0, sizeof(left));
memset(right,0, sizeof(right));
方法二
memset(map, 0, sizeof(int)*(MAXSIZE+1));
memset(left, 0, sizeof(int)*(2*MAXSIZE+1));
memset(right,0, sizeof(int)*(2*MAXSIZE+1));
需要注意的是 ,不可以使用memset初始化為1
memset(matrix, 1, sizeof(matrix)); //會失敗
memset(matrix, -1, sizeof(matrix)); //OK
memset(matrix, 0, sizeof(matrix));//OK
memset為字元填入的函式,整數由2或4個位元組(字元)組成
設定的值是0x01,但存入的值卻是0x0101,而導致錯誤的答案
而-1則是0xFF,存入的值是0xFFFF,不會影響答案
#include <stdio.h>
int matrix[5][5];
void init_matrix()
{
//設定陣列內的值全為-1
memset(matrix, 1, sizeof(matrix));
}
int main()
{
int i,j;
init_matrix();
for(i=0;i< 5;i++){
for(j=0;i< 5;i++)
printf("matrix[%d][%d] =%d\n",i,j,matrix[i][j]);
}
system("pause");
訂閱:
文章 (Atom)