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比賽昨天剛剛結束,很多中學生都吊打大學生,更不要說自己了。再次清醒一下,時刻找準自己的定位!
加油!