1. 程式人生 > >2018.11.5水題隨感,進入新階段,衝鴨~~~~~~~~

2018.11.5水題隨感,進入新階段,衝鴨~~~~~~~~

HDOJ2022 32位有符號的整數用long型 還是老問題,用對應的格式化佔位符

HDOJ 2023 程式過程出現小問題,粗心

HDOJ 2024 識別符號由字母、下劃線、數字這三個方面組成,但開頭必須是字母或下劃線。 另外,關鍵字不能是識別符號,如main等。 C語言的關鍵字共有32個,根據關鍵字的作用,可分其為資料型別關鍵字、控制語句關鍵字、 儲存型別關鍵字和其它關鍵字四類。1 資料型別關鍵字(12個): (1) char :宣告字元型變數或函式 (2) double :宣告雙精度變數或函式 (3) enum :宣告列舉型別 (4) float:宣告浮點型變數或函式 (5) int: 宣告整型變數或函式 (6) long :宣告長整型變數或函式 (7) short :宣告短整型變數或函式 (8) signed:宣告有符號型別變數或函式 (9) struct:宣告結構體變數或函式 (10) union:宣告聯合資料型別 (11) unsigned:宣告無符號型別變數或函式 (12) void :宣告函式無返回值或無引數,宣告無型別指標(基本上就這三個作用) (2)控制語句關鍵字(12個): A迴圈語句 (1) for:一種迴圈語句(可意會不可言傳) (2) do :迴圈語句的迴圈體 (3) while :迴圈語句的迴圈條件 (4) break:跳出當前迴圈 (5) continue:結束當前迴圈,開始下一輪迴圈 B條件語句 (1)if: 條件語句 (2)else :條件語句否定分支(與 if 連用) (3)goto:無條件跳轉語句 C開關語句 (1)switch :用於開關語句 (2)case:開關語句分支 (3)default:開關語句中的“其他”分支 D return :子程式返回語句(可以帶引數,也看不帶引數) 3 儲存型別關鍵字(4個) (1)auto :宣告自動變數 一般不使用 (2)extern:宣告變數是在其他檔案正宣告(也可以看做是引用變數) (3)register:宣告積存器變數 (4)static :宣告靜態變數 4 其它關鍵字(4個): (1)const :宣告只讀變數 (2)sizeof:計算資料型別長度 (3)typedef:用以給資料型別取別名(當然還有其他作用) (4)volatile:說明變數在程式執行中可被隱含地改變.

下劃線ASCII值 95 數字0 ASCII值 48 大寫A ASCII值65 小寫a ASCII值97

1.scanf() 所在標頭檔案:stdio.h

語法:scanf(“格式控制字串”,變數地址列表);

接受字串時:scanf("%s",字元陣列名或指標);

2.gets() 所在標頭檔案:stdio.h

語法:gets(字元陣列名或指標);

兩者在接受字串時:

1.不同點: scanf不能接受空格、製表符Tab、回車等;

而gets能夠接受空格、製表符Tab和回車等;

2.相同點: 字串接受結束後自動加’\0’。

字元比較直接引號加字元

不知道自己哪錯了

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int n,i;
	char str[50];
	scanf("%d",&n);
	while(n)
	{
    	getchar();
    	gets(str);
    	if(str[0]=='_' || ('A'<=str[0] && str[0]<='Z') || ('a'<=str[0] && str[0]<='z'))
    	{
       	 	for(i=1;str[i]!='\0';i++)
        	{
            	if(str[i]!='_'  &&  !('A'<=str[i]&&str[i]<='Z') && !('a'<=str[i]&&str[i]<='z') && !('0'<=str[i] && str[i]<='9'))
            	{
                	printf("no\n");
                	break;
            	}
           		if(i==strlen(str)-1);
        	   	 {
             	   printf("yes\n");
            	}
        	}
    	}
    	else
    	{
        	printf("no\n");
        	n-=1;
        	continue;
    	}
    	n--;
	}
	return 0;
}

以上程式碼不正確,提供錯誤示範!

錯誤在最裡面的if,為啥我還沒想通,知道的大佬,歡迎留言~~

scanf和get的區別 必須讓getchar放在scanf之後吸收回車 如果放到迴圈裡會讓gets的第一個字串被getchar吸收 如果判斷非要跳出迴圈一定要有賦值語句flag=0,否則flag可能為1

scanf 不接受換行符,getchar和gets都接受換行符 getchar輸入一個字元 gets輸入一行字元

HDOJ2025為什麼不需要考慮大小寫問題??

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int i,a[100];
	char str[100],max1='A',max2='a',temp;
	while(scanf("%s",str)!=EOF)
	{
    	getchar();
    	for(i=0;i<strlen(str);i++)
    	{
        	if(str[i]<='Z' && str[i]>='A' && str[i]>=max1)
        	{
           		 max1=str[i];
        	}
        	if(str[i]<='z' && str[i]>='a' && str[i]>=max2)
        	{
            	max2=str[i];
        	}
        	temp=max1+32;
        	if(	temp>max2)
        	{
            	for(i=0;i<strlen(str);i++)
            	{
                	printf("%c",str[i])
                	if(str[i]==max1)
                	{
                	}
            	}
        	}
    	}
	}
	return 0;
}

這個程式碼沒寫完,這個思路不對。 正確思路不需要想大小寫,直接比較選最大,直接輸出直到輸出最大字元時,在後面輸出(max)。

HDOJ2027

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
	int n,i;
	char str[100];
	scanf("%d",&n);
	getchar();
	while(n--)
	{
    	int num1=0,num2=0,num3=0,num4=0,num5=0;
    	gets(str);
    	for(i=0;i<strlen(str);i++)
    	{
        	if(str[i]=='a')
        	{
            	num1+=1;
        	}
        	if(str[i]=='e')
        	{
            	num2+=1;
        	}
        	if(str[i]=='i')
        	{
            	num3+=1;
        	}
        	if(str[i]=='o')
        	{
            	num4+=1;
       	 	}
        	if(str[i]=='u')
        	{
            	num5+=1;
        	}
    	}
    	printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n",num1,num2,num3,num4,num5);
    	if(n!=0)
    	{
        	printf("\n");
    	}
	}
	return 0;
}

注意題幹最後一塊無空行 然後區分空行和換行的區別

HDOJ 2032 PE是因為空格不是因為換行 每行的最後不能有空格而是一個換行符

HDOJ 2054 程式魯棒性的最好詮釋

很多情況和資料都是不可想象的 這題注意 只需考慮小數點後有多個0的情況,比如1.000 和 1比較 不需要考慮前導0,即不會出現0000100 不需考慮正負號,即只有無符號數 不會出現這種 .100 這種逆天的資料,即不可能小數點開頭 而且這題會出現大數比較 這題絕了,累死我了,定義函式(用到了對字元型陣列實參的修改) 最後需要注意小數點影響判斷結果

學校OJ 1111 本題需要注意的一個是EOF的輸出,和pow精度缺失需要用longlong整型

HDOJ 2055

#include <stdio.h>
#include <stdlib.h>
/*int func(char s)
{
	int num=0;
	if(s<='Z' && s>='A')
	{
   	 	num=s-64;
    	return num;
	}
	else
	{
    	num=s-96;
    	num*=(-1);
    	return num;
	}
}*/
int main()
{
	int t,y;
	char s;
	scanf("%d",&t);
	getchar();
	while(t--)
	{
    	scanf("%c%d",&s,&y);
    	getchar();
    	if(s<91)
    	{
        	printf("%d\n",s-64+y);
    	}
    	else
    	{
        	printf("%d\n",(s-96)*(-1)+y);
    	}
	}
	return 0;
}

開啟肝題新階段,進入我要學演算法階段18年11月5日

總結一下完成的第一個階段的經驗

最大的毛病有

	輸入丟取址符
	輸出加取址符
	邊界範圍是否有等號
	丟分號
	邏輯錯誤,這點可以動手寫在紙上改善一下
	一定要注意格式,PE不能忍
	RE的題需要看看,因為這樣的題目一般都是因為不能優化做法,或者直接暴力做的

天炸大佬昨天剛講,對我來說最有用的,是做題的總體思路

先優化時間!再在此基礎上節省空間

9月份到現在,其實對自己的進度很不滿意,走的很慢!希望自己可以抓緊抓緊,這麼好的年齡,一定要有一段無悔青春。第一階段其實很多方面還不完全成熟,但是我認為可以再後面繼續鍛鍊,因為第一階段都很基礎,以後的階段也不會一下子就提升難度,所以不慌,紮紮實實的走。acm比賽昨天剛剛結束,很多中學生都吊打大學生,更不要說自己了。再次清醒一下,時刻找準自己的定位!

加油!