01
津津上初中了。媽媽認為津津應該更加用功學習,所以津津除了上學之外,還要參加媽媽為她報名的各科復習班。另外每周媽媽還會送她去學習朗誦、舞蹈和鋼琴。但是津津如果一天上課超過八個小時就會不高興,而且上得越久就會越不高興。假設津津不會因為其它事不高興,并且她的不高興不會持續(xù)到第二天。請你幫忙檢查一下津津下周的日程安排,看看下周她會不會不高興;如果會的話,哪天最不高興。
輸入描述 Input Description
輸入包括七行數(shù)據(jù),分別表示周一到周日的日程安排。每行包括兩個小于10的非負整數(shù),用空格隔開,分別表示津津在學校上課的時間和媽媽安排她上課的時間。
輸出描述 Output Description
輸出包括一行,這一行只包含一個數(shù)字。如果不會不高興則輸出0,如果會則輸出最不高興的是周幾(用1, 2, 3, 4, 5, 6, 7分別表示周一,周二,周三,周四,周五,周六,周日)。如果有兩天或兩天以上不高興的程度相當,則輸出時間最靠前的一天。
樣例輸入 Sample Input
5 3
6 2
7 2
5 3
5 4
0 4
0 6
樣例輸出 Sample Output
3
#include<stdio.h>
int main(){
int a,b,i,day,max,array[8];
char c;
for(i=1;i<=7;i++){
scanf("%d %d",&a,&b);
array[i]=a+b;
}
max=array[0];
for(i=1;i<=7;i++){
if(max<array[i]){
max=array[i];
day=i;
}
}
if(max>8)
printf("%d",day);
else printf("%d",0);
}
02 日期問題
#include <stdio.h>
#include <stdlib.h>
int a=0,b=0,c=0; //全局變量
int run(int x){ //檢測當年是否為閏年,是閏年返回1,不是閏年返回0
if(x%4==0&&x%100!=0)return 1;
if(x%400==0)return 1;
return 0;
}
int check(int i,int j,int k){ //檢測三個參數(shù)是否符合要求,符合返回1,不符合返回0
i=i%100;
if(a==i && b==j && c==k)return 1; //a-b-c 年月日
if(a==k && b==j && c==i)return 1; //a-b-c 日月年
if(a==j && b==k && c==i)return 1; //a-b-c 月日年
return 0;
}
int main(int argc, char *argv[])
{ int i=0,j=0,k=0;
int month[13]={0,31,0,31,30,31,30,31,31,30,31,30,31}; //閏年2月有29號,平年2月只有28號
scanf("%d/%d/%d",&a,&b,&c);
for(i=1960;i<=2059;i++){ //年份遍歷
for(j=1;j<=12;j++){ //月份遍歷
if(run(i)==1)month[2]=29;else month[2]=28;
for(k=1;k<=month[j];k++){ //日遍歷
if(check(i,j,k)==1){printf("%d-%02d-%02d\n",i,j,k);}
}
}
} return 0;
}
03 楊輝三角形
輸入描述
輸入一個整數(shù) N。
輸出描述
輸出一個整數(shù)代表答案。
輸入輸出樣例
示例 1
輸入文章來源:http://www.zghlxwxcb.cn/news/detail-732266.html
6
輸出
13
//解題思路:
//1、首先通過畫圖,發(fā)現(xiàn)楊輝三角對稱,而題目要求找到數(shù) n 最早出現(xiàn)的位置,
//那么我們可以確定,n最早出現(xiàn)的位置一定在左半邊,而且最中間的是該行最大的數(shù)
//通過圖,我們可以發(fā)現(xiàn)通過行和列的枚舉是不好的,看數(shù)據(jù)1e9也就是十億,
//2.這是個很大的工程,因此我們試想可不可以從斜行來觀察呢??
//下圖我們可以觀察到,第1斜行的1=C(0,0),第二斜行的2=C(2,1),第三斜行的6=C(4,2),第四斜行的20=C(6,3)…
//也就是說,如果我設共 i 斜行,那么第 i 斜行的第一個數(shù)為C(2*i,i),同時它是該斜行中最小的數(shù)字
//那么我們一定可以找到1e9的位置
//3.1e9的位置確定:
//顯然C(32,16)< 1e9,而C(34,17)> 1e9,因此我們可以對前16行進行枚舉
//4.枚舉順序:
//首先對于左半邊楊輝三角來說,每行最大的數(shù)一定出現(xiàn)在該行末尾,同時它也是該數(shù)最早出現(xiàn)的位置
//因此我們不妨從第16斜行開始枚舉,只要出現(xiàn)等于 n 的數(shù)直接返回位置即可
//對于查找,我們可以對每個斜行采用二分的方法查找n
//對于位置,我們可以在查找的時候確定,n所在行 r(不是斜行)和所在斜行 k ,
//然后通過等差公式 r*(r+1)/2 計算它之前數(shù)目的個數(shù)再加上 k+1
//例如:n = 20 (由于推到,第一行行號為 0 ,斜行行號也是 0)
//查找過程我們可以確定20在第7行,實際返回 r = 6 ,在第 4 斜行 ,但此時 k 是 3,因此 k+1
//結果 ans = 6*7/2 + 3 + 1 = 25
//5.時間復雜度的計算:
//枚舉16斜行 --> O(16)
//二分查找 --> O(logn)
//綜合起來,算法時間復雜度為 O(16logn)
#include<stdio.h>
#include<stdlib.h>
#define ll long long
int n;
int max(int a,int b)
{
return a>b?a:b;
}
ll C(int a,int b)//計算二項式C(a,b)
{
ll res=1;
int i,j;
for(i=a,j=1;j<=b;i--,j++)
{
res=res*i/j;
if(res>n)
{
return res;//如果大于n已經(jīng)無意義了,因為斜行是遞增的
}
}
return res;
}
int check(int k)
{
//二分該斜行,找到大于等于該值的第一個數(shù)
//左邊界2k,右邊界max(n,l),避免右邊界小于左邊界
int l=2*k,r=max(n,l);
while(l<r)
{
int mid=(l+r)/2;
if(C(mid,k)>=n) r=mid;
else l=mid+1;
}
if(C(r,k)!=n)
{
return 0;
}
printf("%lld",(ll)(r+1)*r/2+k+1);
return 1;
}
int main()
{
scanf("%d",&n);
int i;
//從第16斜行枚舉
for(i=16; ;i--)
{
if(check(i)==1)
{
break;
}
}
return 0;
}
04 兩數(shù)之和
題目描述
輸入一個整數(shù)n,輸入n個整數(shù)存入數(shù)組 nums 再輸入一個整數(shù)目標值 target,請你在該數(shù)組中找出 和為目標值 target 的那 兩個 整數(shù),并返回它們的數(shù)組下標。你可以假設每種輸入只會對應一個答案。但是,數(shù)組中同一個元素在答案里不能重復出現(xiàn)。
輸入格式
輸入n和n個整數(shù)的數(shù)組,再輸入一個整數(shù)target
輸出格式
輸出兩個整數(shù)表示數(shù)組下標
輸入樣例1
4 2 7 11 15 9
輸出樣例1
0 1
輸入樣例2
3 3 2 4 6
輸出樣例2
1 2
輸入樣例3
2 3 3 6
輸出樣例3
0 1
#include<stdio.h>
int main()
{
int n,i,j;
scanf("%d",&n);
int nums [n];
for(int i=0;i<n;i++){
scanf("%d",&nums[i]);
}
int target;
scanf("%d",&target);
for(int i=0;i<n-1;i++){
for(int j=1;j<=n;j++){
if(nums[i]+nums[j]==target){
printf("%d %d",i,j);
break;
}
}
}
}
05 反轉字符串
題目描述
輸入一個整數(shù)k和字符串,從字符串開頭算起,每計數(shù)至 2k 個字符,就反轉這 2k 字符中的前 k 個字符。
如果剩余字符少于 k 個,則將剩余字符全部反轉。
如果剩余字符小于 2k 但大于或等于 k 個,則反轉前 k 個字符,其余字符保持原樣。
輸入格式
輸入整數(shù)k和字符串s
輸出格式
輸入樣例1
2 abcdefg
輸出樣例1
bacdfeg
輸入樣例2
2 abcd
輸出樣例2
bacd
#include <stdio.h>
#include <string.h>
void reverseString(char *str, int k) {
int len = strlen(str);
int i;
for (i = 0; i < len; i += 2 * k) {
int left = i;
int right = (i + k - 1 < len) ? (i + k - 1) : (len - 1);
while (left < right) {
char temp = str[left];
str[left] = str[right];
str[right] = temp;
left++;
right--;
}
}
}
int main() {
int k;
char str[100];
scanf("%d %s", &k, str);
reverseString(str, k);
printf("%s\n", str);
return 0;
}
06 受傷的皇后
輸入描述
輸入的第一行包含一個整數(shù) n。
其中,1≤n≤10。
輸出描述
輸出一個整數(shù),表示答案。
輸入輸出樣例
示例 1
輸入
4
輸出
2
#include <iostream>
using namespace std;
int chess[15] = {};
int n, cnt = 0;
//r是行,y是列
bool check(int y, int r) {
for (int i = 0; i < r; ++i) { //遍歷前r行
if (chess[i] == y) return false; //前面某行上的該列已有棋子
else if (abs(i - r) == abs(chess[i] - y) && abs(i - r) < 3) return false; //對角線上已有棋子
}
return true;
}
void dfs(int r) { //r是行
if (r == n) {
++cnt;
return;
}
for (int i = 0; i < n; ++i) {
if (check(i, r)) {
chess[r] = i;
dfs(r + 1);
}
}
}
int main() {
cin >> n;
dfs(0);
cout << cnt << endl;
return 0;
}
07 談判
輸入輸出樣例
示例 1
輸入
4
9 1 3 5
輸出
31
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num,temp;
int ans = 0;
scanf("%d",&num);
int clan[num];
for(int i = 0;i < num;i++)
{
scanf("%d",&clan[i]);
}
for(int i = 0;i < num;i++)
{
for(int j = i + 1;j < num;j++)
{
if(clan[i] > clan[j])
{
temp = clan[i];
clan[i] = clan[j];
clan[j] = temp;
}
}
}
for(int i = num - 1;i >= 0;i--)
{
if(i) ans += clan[i] * (num - i);
else ans += clan[i] * (num - i - 1);
}
printf("%d",ans);
return 0;
}
08 灌溉
輸出描述
輸出一個整數(shù),表示答案。
輸入輸出樣例
示例 1
輸入
3 6
2
2 2
3 4
1
輸出
9
#include <stdio.h>
void disp(int x,int y,int a[x][y])//顯示花園情況
{
for(int i=0;i<x;i++){
for(int j=0;j<y;j++)
printf(" %d ",a[i][j]);
printf("\n\n");
}
}
int main()
{
int n,m,t,r,c,k,ans=0,list_i=0;//list_i后面就知道是什么了
scanf("%d %d",&n,&m);
scanf("%d",&t);
int gd[n][m],waterlist[10000][2]={0}; //waterlist是保存當前有水格子坐標的清單
for(int i=0;i<n;i++) //花園初始化
for(int j=0;j<m;j++)
gd[i][j]=0;
//disp(n,m,gd);
while(t--){
scanf("%d %d",&r,&c);
gd[r-1][c-1]=1; //輸入水源坐標,題目指現(xiàn)實中的坐標,要-1
}
//disp(n,m,gd);
scanf("%d",&k);
while(k--)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(gd[i][j]==1)//遍歷整個花園,找到當前有水的格子
{
waterlist[list_i][0]=i;
waterlist[list_i++][1]=j;//將有水格子的坐標保存到waterlist中,list_i就是清單的序號
}
}
}
for(int i=0;i<list_i;i++){ //開始擴散,記得判斷邊界,花園以外的地方超過了數(shù)組范圍
gd[waterlist[i][0]] [waterlist[i][1]]=1;
gd[waterlist[i][0]] [waterlist[i][1]+1]=(waterlist[i][1]+1<=n+1);
gd[waterlist[i][0]] [waterlist[i][1]-1]=(waterlist[i][1]-1>=0);
gd[waterlist[i][0]+1] [waterlist[i][1]]=(waterlist[i][0]+1<=m+1);
gd[waterlist[i][0]-1] [waterlist[i][1]]=(waterlist[i][0]+1>=0);
}
}//一分鐘后,k+1,重新遍歷整個花園,更新有水格子清單,進行第二次擴散,以此類推。
//disp(n,m,gd);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
ans+=gd[i][j];
}
}
printf("%d",ans);
return 0;
}
09 翻硬幣
輸出描述
一個整數(shù),表示最小操作步數(shù)。
輸入輸出樣例
示例
輸入
**********
o****o****
輸出
5
#include<iostream>
#include<string.h>
using namespace std;
void swap(char x[1005],int i){
if(x[i]=='*'){
x[i] = 'o';
}else
x[i] = '*';
}
int main()
{
char s[1000];
char x[1005];
cin>>s;
cin>>x;
int count = 0;
int len = strlen(x);
for(int i=0;i<len;i++){
if(s[i]!=x[i]){
swap(x,i);
swap(x,i+1);
count ++ ;
}
}
cout<<count<<endl;
return 0;
}
10 時間加法
輸出描述
輸出第一行包含一個整數(shù),表示結果是幾點。
第二行包含一個整數(shù),表示結果是幾分。
輸入輸出樣例
示例 1
輸入
3
20
165
輸出文章來源地址http://www.zghlxwxcb.cn/news/detail-732266.html
6
5
#include <stdio.h>
#include <stdlib.h>
int main()
{
// 請在此輸入您的代碼
int a,b,m,t;
scanf("%d\n%d\n%d",&a,&b,&t);
m=a*60+b+t;
printf("%d\n%d",m/60,m%60);
return 0;
}
到了這里,關于藍橋杯 題庫 簡單 每日十題 day4的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!