??透傎愓Z法入門班順序結(jié)構(gòu)習(xí)題
創(chuàng)新互聯(lián)企業(yè)建站,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁設(shè)計(jì),有多年建站和網(wǎng)站代運(yùn)營經(jīng)驗(yàn),設(shè)計(jì)師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對于成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動的思維在網(wǎng)頁中充分展現(xiàn),通過對客戶行業(yè)精準(zhǔn)市場調(diào)研,為客戶提供的解決方案。C語言版本的參考代碼
重點(diǎn)題:
1005 乘法表
1006 KiKi學(xué)程序設(shè)計(jì)基礎(chǔ)
1017 水題再次來襲:明天星期幾?
1018 開學(xué)?
1019 helloworld
1020 a+b
1029 計(jì)算三角形的周長和面積
1036 組隊(duì)比賽
1038 長方體
1039 使徒襲來
1040 白兔的分身術(shù)
1042 Tobaku Mokushiroku Kaiji
1043 珂朵莉的假動態(tài)仙人掌
1044 旅游觀光
1045 [NOIP2002]自由落體
1047 得不到的愛情[塞瓦維斯特定理]
定理例題: 2013藍(lán)橋杯
1001 這是一道簽到題
#includeusing namespace std;
int main()
{cout<< "zhe"<< endl;
cout<< "shi"<< endl;
cout<< "yi"<< endl;
cout<< "dao"<< endl;
cout<< "qian"<< endl;
cout<< "dao"<< endl;
cout<< "ti"<< endl;
return 0;
}
1002 排列式
#includeusing namespace std;
int main()
{//每個cout打印一行
cout<< "4396 = 28 x 157"<< endl;
cout<< "5346 = 18 x 297"<< endl;
cout<< "5346 = 27 x 198"<< endl;
cout<< "5796 = 12 x 483"<< endl;
cout<< "5796 = 42 x 138"<< endl;
cout<< "6952 = 4 x 1738"<< endl;
cout<< "7254 = 39 x 186"<< endl;
cout<< "7632 = 48 x 159"<< endl;
cout<< "7852 = 4 x 1963"<< endl;
return 0;
}
OJ不會識別字符串里的換行,所以這種寫法是錯誤的
#includeusing namespace std;
int main()
{cout<< "
4396 = 28 x 157
5346 = 18 x 297
5346 = 27 x 198
5796 = 12 x 483
5796 = 42 x 138
6952 = 4 x 1738
7254 = 39 x 186
7632 = 48 x 159
7852 = 4 x 1963"<< endl;
return 0;
}
1003 小飛機(jī)
#includeusing namespace std;
int main()
{cout<< " ** "<< endl;
cout<< " ** "<< endl;
cout<< "************"<< endl;
cout<< "************"<< endl;
cout<< " * * "<< endl;
cout<< " * * "<< endl;
return 0;
}
1004 學(xué)姐的"Helloworld!"
#includeusing namespace std;
int main()
{cout<< "Helo word!"<< endl;
return 0;
}
1005 乘法表 方法一
需要注意,兩數(shù)相乘小于10的時候,可以利用空格占位。
#includeusing namespace std;
int main()
{for (int i = 1;i<= 9;i++)
{for (int j = 1;j<= i;j++)
{ //這里需要注意的是打印順序是j,i,i * j
if (i * j< 10 ) printf("%d*%d= %d ",j,i,i * j);
else printf("%d*%d=%d ",j,i,i * j);
}
printf("\n");
}
return 0;
}
仔細(xì)思考i
與j
分別代表的數(shù)字,如果打印順序是i,j,i * j
,則結(jié)果如下:
1005 乘法表 方法二
OJ會自動忽略每對雙引號之間的空格,故改寫法等同于
1*1= 1\n1*2= 2 2*2= 4\n... ...
#includeusing namespace std;
int main()
{cout<< "1*1= 1\n"
"1*2= 2 2*2= 4\n"
"1*3= 3 2*3= 6 3*3= 9\n"
"1*4= 4 2*4= 8 3*4=12 4*4=16\n"
"1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25\n"
"1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36\n"
"1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49\n"
"1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64\n"
"1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81\n";
return 0;
}
1006 KiKi學(xué)程序設(shè)計(jì)基礎(chǔ)
在雙引號“ ”
中再次出現(xiàn)單引號或者\(yùn)時,需要在其前面再加上一個\
才可以輸出其本身。例:
printf("\"");
printf("\\");
#includeusing namespace std;
int main()
{printf("printf(\"Hello world!\\n\");\n");
printf("cout<< \"Hello world!\"<< endl;\n");
return 0;
}
1007 疫情死亡率
%5.3f
表示結(jié)果占五位字符(包括小數(shù)點(diǎn)在內(nèi)),其中小數(shù)部分占三位
#includeusing namespace std;
typedef long long ll;
int main()
{ll a,b;
scanf("%lld %lld",&a,&b);
double ans = 1.0 * b / a;//需要先乘以1.0轉(zhuǎn)化為小數(shù)運(yùn)算
printf("%5.3f",ans * 100);
printf("%");
return 0;
}
1008 愛因斯坦的名言
于題號1006一樣,在引號中再次出現(xiàn)引號時,需要在其前面再加上一個\
才可以輸出其本身。
#includeusing namespace std;
int main()
{cout<< "\"Genius is 1% inspiration and 99% perspiration.\""<< endl;
return 0;
}
1009 字符串輸出1.0
注意錯誤用法:while(3--)
while(x - -)
:其中,x要求是變量,不可以是常量
#includeusing namespace std;
int main()
{int x = 3;
while (x--) cout<< "Welcome to ACM / ICPC!"<< endl;
return 0;
}
1010 牛牛學(xué)說話之-整數(shù)
#includeusing namespace std;
int main()
{int a;
cin >>a;
cout<< a<< endl;
return 0;
}
1011 牛牛學(xué)說話之-浮點(diǎn)數(shù)
保留x位小數(shù)的格式為%.xf
#includeusing namespace std;
int main()
{double d;
scanf("%lf",&d);
printf("%.3f",d);
return 0;
}
1012 牛牛學(xué)加法
#includeusing namespace std;
int main()
{int a,b;
cin >>a >>b;
cout<< a + b<< endl;
return 0;
}
1013 牛牛學(xué)除法
#includeusing namespace std;
int main()
{int a,b;
cin >>a >>b;
cout<< a / b<< endl;
return 0;
}
1014 牛牛學(xué)取余
#includeusing namespace std;
int main()
{int a,b;
cin >>a >>b;
cout<< a % b<< endl;
return 0;
}
1015 浮點(diǎn)除法
先乘以1.0轉(zhuǎn)換為double類型的小數(shù)
#includeusing namespace std;
int main()
{int a,b;
scanf("%d%d",&a,&b);
double ans = 1.0 * a / b;
printf("%.3f",ans);
return 0;
}
1016 計(jì)算帶余除法
#includeusing namespace std;
int main()
{int a,b;
cin >>a >>b;
cout<< a / b<< " "<< a % b<< endl;
return 0;
}
1017 水題再次來襲:明天星期幾
結(jié)論: 今天是星期x,則明天是星期x % 7 + 1
#includeusing namespace std;
int main()
{int a;
cin >>a;
cout<< a % 7 + 1<< endl;
return 0;
}
1018 開學(xué)
#includeint main()
{int x,n;
scanf("%d%d",&x,&n);
x--;
x = (x + n % 7) % 7;
x %= 7;
printf("%d",x + 1);
return 0;
}
錯誤代碼: 若a = 7,b = 9
,得到的結(jié)果應(yīng)該是2,但實(shí)際上9 % 7 + 7 = 9,不符合實(shí)際
#includeusing namespace std;
int main()
{int a,b;
cin >>a >>b;
cout<< b % 7 + a<< endl;
return 0;
}
1019 helloworld
注意:① hello world兩個單詞的中間有一個空格,不能忽略空格字符的下一個字符 ② 輸出完空格之后不需要換行
#includeusing namespace std;
int main()
{cout<< char ('h' + 1);
cout<< char ('e' + 1);
cout<< char ('l' + 1);
cout<< char ('l' + 1);
cout<< char ('o' + 1);
cout<< char (' ' + 1);
cout<< char ('w' + 1);
cout<< char ('o' + 1);
cout<< char ('r' + 1);
cout<< char ('l' + 1);
cout<< char ('d' + 1);
return 0;
}
1020 a+b
cout<< hex<< a
與printf("%x",a)
等價,前者是C++的表示方法,后者是C語言的表示方法
方法一:
#includeusing namespace std;
int main()
{int a,b;
cin >>a >>b;
cout<< hex<< a + b<< endl;
return 0;
}
方法二:
#includeusing namespace std;
int main()
{int a,b;
scanf("%d%d",&a,&b);
printf("%x",a + b);
return 0;
}
1021 整數(shù)的個位
#includeusing namespace std;
int main()
{int a;
cin >>a;
cout<< a % 10;
return 0;
}
1022 整數(shù)的十位
#includeusing namespace std;
int main()
{int a;
cin >>a;
cout<< a / 10 % 10;
return 0;
}
1023 反向輸出一個四位數(shù)
#includeusing namespace std;
int main()
{int a;
cin >>a;
int qian = a / 1000;//得到千位數(shù)字1
int bai = a / 100 % 10;//得到百位數(shù)字2
int shi = a / 10 % 10;//得到十位數(shù)字3
int ge = a % 10;//得到個位數(shù)字4
cout<< ge<< shi<< bai<< qian;
return 0;
}
題目要求輸出四位數(shù),故1000應(yīng)該輸出0001,若需要舍棄前導(dǎo)0,則取出各個位上的數(shù)字進(jìn)行計(jì)算
#includeusing namespace std;
int main()
{int a;
cin >>a;
int qian = a / 1000;
int bai = a / 100 % 10;
int shi = a / 10 % 10;
int ge = a % 10;
int ans = ge * 1000 + shi * 100 + bai * 10 + qian;
cout<< ans<< endl;
return 0;
}
1024 總成績和平均分計(jì)算
#includeusing namespace std;
int main()
{double a,b,c;
scanf ("%lf %lf %lf",&a,&b,&c);
printf("%.2f %.2f",a + b + c,(a + b + c) / 3);
return 0;
}
1025 計(jì)算平均成績
#includeusing namespace std;
int main()
{int a,b,c,d,e;
scanf ("%d %d %d %d %d",&a,&b,&c,&d,&e);
//需要先乘以1.0,否則結(jié)果是整數(shù)/整數(shù) = 整數(shù)
printf("%.1f",1.0 * (a + b + c + d + e) / 5);
return 0;
}
1026 牛牛學(xué)梯形
#includeusing namespace std;
int main()
{int up,down,height;
scanf("%d %d %d",&up,&down,&height);
printf("%.3f",1.0 * (up + down) * height / 2);
return 0;
}
1027 牛牛學(xué)矩形
#includeusing namespace std;
int main()
{int a,b;
cin >>a >>b;
cout<< (a + b) * 2<< endl<< a * b;
return 0;
}
1028 牛牛學(xué)立體
#includeusing namespace std;
int main()
{int a,b,c;
cin >>a >>b >>c;
cout<< 2 * a * b + 2 * a * c + 2 * b * c<< endl<< a * b * c;
return 0;
}
1029 計(jì)算三角形的周長和面積
利用海倫公式求三角形的面積:已知三角形的三邊分別長a,b,c,令p = (a + b + c) / 2
,S = sqrt (p * (p - a) * (p - b) * (p - c))
#include#includeusing namespace std;
int main()
{int a,b,c;
scanf("%d %d %d",&a,&b,&c);
double p = 1.0 * (a + b + c) / 2;//需要先乘以1.0
printf("circumference=%.2f ",double (a + b + c));
printf("area=%.2f",sqrt(p * (p - a) * (p - b) * (p - c)));
return 0;
}
1030 你能活多少秒
不開long long淚兩行
#includeusing namespace std;
int main()
{long long age;
cin >>age;
cout<< age * 31560000;
return 0;
}
1031 時間轉(zhuǎn)換
#includeusing namespace std;
int main()
{int t;
cin >>t;
cout<< t / 3600<< " "<< t % 3600 / 60<< " "<< t % 3600 % 60;
return 0;
}
1032 溫度轉(zhuǎn)換
#includeusing namespace std;
int main()
{double f;
scanf("%lf",&f);
printf("%.3f",1.0 * 5 / 9 * (f - 32));//需要先乘以1.0
return 0;
}
1033 計(jì)算機(jī)內(nèi)存
#includeusing namespace std;
int main()
{int n;
cin >>n;
cout<< n * 1024 * 1024 / 4;
return 0;
}
1034 [NOIP2017]成績
#includeusing namespace std;
int main()
{int a,b,c;
cin >>a >>b >>c;
cout<< a * 0.2 + b * 0.3 + c * 0.5<< endl;
return 0;
}
1035 KiKi的最高分
#includeusing namespace std;
int main()
{int a,b,c;
cin >>a >>b >>c;
cout<< max(max(a,b),c);
return 0;
}
1036 組隊(duì)比賽
題目大意:給出四個整數(shù)a,b,c,d.選擇兩個數(shù)相加得到sum1,另外兩個數(shù)相加得到sum2,計(jì)算sum1與sum相減的最小值(大于等于0)
思路:
① 首先,選取四個數(shù)字中的大值和最小值,并計(jì)算大值與最小值之和sum1
② 計(jì)算去除大值與最小值之后,剩下兩個數(shù)字相加之和sum2
③ 計(jì)算sum1與sum2之差即可,需要注意的是要保證差值大于0。如四個數(shù)字分別為1,5,6,7時,sum1 = 8,sum2 = 11,此時需要用sum2 - sum1
證明略。
寫法一:
#include#include
using namespace std;
int main()
{int a,b,c,d;
cin >>a >>b >>c >>d;
int maxn = max(max(a,b),max(c,d));//找出a,b,c,d,中的大值
int minn = min(min(a,b),min(c,d));//找出a,b,c,d,中的最小值
int sum1 = maxn + minn;//大值與最小值之和
int sum2 = a + b + c + d - maxn - minn;//除去大最小兩數(shù)之和
cout<< max(sum1,sum2) - min(sum1,sum2)<< endl;//保證結(jié)果是正值
return 0;
}
數(shù)組寫法:
需要注意的是fabs(x)
可能會返回double類型的值,故需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換
#include#include
#includeusing namespace std;
int score[5];
int main()
{int a,b,c,d;
for (int i = 0;i< 4;i++) cin >>score[i];
sort(score,score + 4);//從小到大排序
int A = score[0] + score[3];
int B = score[1] + score[2];
int ans = (int)fabs(A - B);
cout<< ans;
return 0;
}
1037 平方根
sqrt(x)
可以求出根號x的值,假設(shè)其為result,再將result設(shè)為int類型即可向下取整。
#include#includeusing namespace std;
int main()
{int n;
cin >>n;
int ans = sqrt(n);
cout<< ans;
return 0;
}
1038 長方體
設(shè)長方體共享一個頂點(diǎn)的三條邊的長度分別為x,y,z;
則其三個面的面積:
x * z = a;
y * z = b;
x * y = c;
不難發(fā)現(xiàn),a * b / c = x * z * y * z / x / y = z * z = z ^ 2;
同理可以得到另外兩條邊長的平方。
結(jié)論:已知共享長方體一個頂點(diǎn)的三個面的面積,其中任意兩個面積相乘之后除以第三個面積,可以得到共享長方體一個頂點(diǎn)的一條邊的邊長的平方。
#include#includeusing namespace std;
int main()
{int a,b,c;
cin >>a >>b >>c;
int l1 = a * b / c;
int l2 = a * c / b;
int l3 = b * c / a;
cout<< 4 * (sqrt(l1) + sqrt(l2) + sqrt(l3));
return 0;
}
1039 使徒襲來
① a + b ≥ 2√ab,當(dāng)a = b時,a + b取得最小值;
② 同理,a + b + c ≥ 3*三次根號下abc,當(dāng)a = b = c時,a + b + c取得最小值;
#include#includeusing namespace std;
int main()
{int n;
scanf("%d",&n);
double x = pow(n,1.0 / 3);//注意此處不可以寫成1/3,因?yàn)?/3 = 0
double ans = 3 * x;
printf("%.3f",ans);
return 0;
}
1040 白兔的分身術(shù)
顯然,一只兔子在第一輪之后變成了1p=p只兔子,第二輪之后變成了1p*p=p^2 只兔子… …第k輪之后變成 p ^ k只兔子,即 p ^ k = n;
對于指數(shù)函數(shù)a的x次方,當(dāng)x越大時,函數(shù)增長就越快。相反,x越小時,函數(shù)增長就越慢;故當(dāng)k = 1的時候,p可以取得大值,且p的大值就等于n,即p + k的大值為n + 1。
#includeusing namespace std;
int main()
{long long n;
cin >>n;
cout<< n + 1<< endl;
return 0;
}
1041 紙牌
思路:第一輪減去的數(shù)等于紙牌上初始數(shù)字的一半即可(“對分最小思想”)
假設(shè)兩張紙牌上的數(shù)字初始時均為4(奇數(shù)同理)。
第一輪:第一張紙牌上的數(shù)字變?yōu)? - 2 = 2。(減去第二張紙牌上數(shù)字的一半)
第二輪:第二張紙牌上的數(shù)字變?yōu)? - 2 = 2。(減去第一張紙牌上數(shù)字)
第二輪:第一張紙牌上的數(shù)字變?yōu)? - 2 = 0。(減去第二張紙牌上數(shù)字)
代碼如下,以p,q表示兩張紙牌上的數(shù)字
#includeusing namespace std;
int main()
{int n;
cin >>n;
int b = n / 2;//b表示紙牌上數(shù)字的一半
int p = n,q = n;//p,q分別表示第一、第二張紙牌上的數(shù)字
p = p - b;//第一張紙牌減去第二張紙牌上數(shù)字的一半
q = q - p;//第二張紙牌減去第一張紙牌上的數(shù)字
p = p - q;//第一張紙牌減去第二張紙牌上的數(shù)字
cout<< p + q<< endl;
return 0;
}
1042 Tobaku Mokushiroku Kaiji
如圖所示:
石頭贏剪刀(a - e) :
① 如果kaiji有3個石頭,對方有5個剪刀,則kaiji最多能贏3次(三個石頭全用上);
② 如果kaiji有5個石頭,對方有3個剪刀,則kaiji最多也能贏3次(三個剪刀全用上)。
剪刀贏布(b - f):
① 如果kaiji有3個剪刀,對方有5個布,則kaiji最多能贏3次(三個剪刀全用上);
② 如果kaiji有5個剪刀,對方有3個布,則kaiji最多也能贏3次(三個布全用上)。
布贏石頭(c - d):
① 如果kaiji有3個布,對方有5個石頭,則kaiji最多能贏3次(三個布全用上);
② 如果kaiji有5個布,對方有3個石頭,則kaiji最多也能贏3次(三個石頭全用上)。
寫法一:
#includeusing namespace std;
int main()
{int a,b,c,d,e,f;
cin >>a >>b >>c >>d >>e >>f;
int m = (a - e >0) ? e : a;
int n = (b - f >0) ? f : b;
int q = (c - d >0) ? d : c;
cout<< m + n + q;
return 0;
}
寫法二:
#include#includeusing namespace std;
int main()
{int a,b,c,d,e,f;
cin >>a >>b >>c >>d >>e >>f;
cout<< min(a,e) + min(b,f) + min(c,d);
return 0;
}
1043 珂朵莉的假動態(tài)仙人掌
#includeusing namespace std;
int main()
{int n;;
cin >>n;
int day = 0;
//第一天1個本子,第二天2個,第三天1個,第四天2個...
//按1+2為一組,計(jì)算n個本子可以分為多少組,每組可以得到兩天
day += (n / 3 * 2);
//計(jì)算還剩多少本子,n % 3的結(jié)果可能為0,1,2
n %= 3;
//只要n % 3大于0,就可以再送一天
day += (n % 3 >0) ? 1 : 0;
cout<< day;
return 0;
}
1044 旅游觀光
**分析:**已知從i到j(luò)的票價為(i+j)mod(n+1),不難發(fā)現(xiàn),從1->10的票價為(1+10)mod(10+1)=11%11=0,即免費(fèi),同理2->9票價為0,3->8票價為0,4->7票價為0,5->6票價為0…(2+10)mod(10+1)=12%11=1,從2->10的票價為1,連接2->10,3->9,4->8,5->7,可得最小票價4,并且可由線路1 ->10 ->2 ->9 ->3 ->8 ->4 ->7 ->5 ->6走完所有的點(diǎn)。
通過觀察不難發(fā)現(xiàn):
① 當(dāng)n為偶數(shù)時,所需要的票價為n / 2 - 1;
② 當(dāng)n為偶數(shù)時,所需要的票價為n / 2;
n為偶數(shù):
n為奇數(shù):
#includeusing namespace std;
int main()
{int n;
cin >>n;
if (n % 2) cout<< n / 2;//奇數(shù)
else cout<< n / 2 - 1;//偶數(shù)
return 0;
}
1045 [NOIP2002]自由落體 (看見物理的東西就頭疼,這題不寫了)
1046 掛科
#includeusing namespace std;
int main()
{int n,x,y;
int maxn,minn;//maxn、minn分別表示同時掛兩門課同學(xué)的大值最小值
cin >>n >>x >>y;
if (x + y<= n)//10 3 5
{maxn = min(x,y);//maxn = 3
minn = 0;//3個同學(xué)掛了高數(shù),5個同學(xué)掛了物理,還有兩個同學(xué)沒掛科
}
else
{maxn = min(x,y);//n = 10,x = 6,y = 7,maxn = 6
minn = x + y - n;//minn = 13 - 10 = 3(6個人掛高數(shù),4個人掛物理,6人里再選3人掛物理)
}
cout<< maxn<< " "<< minn<< endl;
return 0;
}
1047 得不到的愛情
塞瓦維斯特定理介紹:
已知a,b為大于1的正整數(shù),a、b的大公約數(shù)為1或者gcd(a,b)=1或者a與b互質(zhì)或者a與b互素,則使不定方程ax+by=C不存在的大非負(fù)整數(shù)C=ab?a?b
定理證明(證明有點(diǎn)難,不會也沒事,反正我不會)
例1:為什么輸入的數(shù)要大于等于2?
假設(shè)a = 1,b = 2
C = (1 - 1) * 2 - 1 = -1
例2:a = 3,b = 4
C = (3 - 1) * 4 - 3 = 5
例3:a = 4,b = 7
C = (4 - 1) * 7 - 4;
根據(jù)規(guī)律:不存在的大值C = (a - 1) * b - a = ab - b - a
本題中,N和M都取大值50000,N x M = 2500000000超過了int的范圍,故需要開long long
#includeusing namespace std;
int main()
{long long n,m;
cin >>n >>m;
cout<< n * m - n - m<< endl;
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧