logo资料库

蓝桥杯练习题库-3算法训练之VIP题.doc

第1页 / 共175页
第2页 / 共175页
第3页 / 共175页
第4页 / 共175页
第5页 / 共175页
第6页 / 共175页
第7页 / 共175页
第8页 / 共175页
资料共175页,剩余部分请下载后查看
算法训练 黑白无常 时间限制:1.0s 内存限制:256.0MB 查看参考代码 问题描述 某寝室的同学们在学术完之后准备玩一个游戏:游戏是这样的,每个人头上都被贴了一张白色或 者黑色的纸,现在每个人都会说一句话“我看到 x 张白色纸条和 y 张黑色的纸条”,又已知每个头上 贴着白色纸的人说的是真话、每个头上贴着黑色纸的人说的是谎话,现在要求你判断哪些人头上贴着 的是白色的纸条,如果无解输出“NoSolution.”;如果有多组解,则把每个答案中贴白条的人的编 号按照大小排列后组成一个数(比如第一个人和第三个人头上贴着的是白纸条,那么这个数就是 13; 如果第 6、7、8 个人都贴的是白纸条,那么这个数就是 678)输出最小的那个数(如果全部都是黑纸 条也满足情况的话,那么输出 0) 输入格式 第一行为一个整数 n,接下来 n 行中的第 i 行有两个整数 x 和 y,分别表示第 i 个人说“我看到 x 张白色纸条和 y 张黑色的纸条”。 输出格式 一行。如果无解输出“NoSolution.”。否则输出答案中数值(具体见问题描述)最小的那个, 如果全部都是黑纸条也满足情况的话,那么输出 0 样例输入 2 1 0 1 0 样例输出 0 样例输入 5 3 1 0 4 1 3 4 0 1 3 样例输出 35 数据规模和约定 n<=8 #include #include int n; int x[8],y[8]; int isok(int a[],int num,int value) //第 i 个人的话是否成立 num 为人下标 value 为 0 白 或 者 1 黑 {
int black=0,white=0,i; for(i=0;i
} } if(sign) { k=1; num=0; for(j=n-1;j>=0;j--) { if(a[j]==0) { num+=k*(j+1); k*=10; } } if(num #include #include int mt[9][2],n; int max[9]={9}; int xl[9]={9}; bool ifc();
int main() { int i,j,m,fi,k,flag; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d %d",&mt[i][0],&mt[i][1]); m=pow(2,n); for(i=0;i>=1; if(xl[j]) xl[0]++;//真话数量 } if(xl[0]>max[0]) continue; if(ifc())//成立 { // // for(k=1;k<=n;k++) printf("%d",xl[k]); printf(" :%d\n",xl[0]); if(max[0]==xl[0]) { for(flag=k=1;k<=n;k++) { if(max[k]>xl[k]) { flag=0; break; } else if(max[k]
} } bool ifc() { int i; for(i=1;i<=n;i++) { if(xl[i])//若此人说真话 { if(mt[i][0]!=xl[0]-1) return false; } else { } if(mt[i][0]==xl[0]) return false; } return true; } 算法训练 数的统计 时间限制:1.0s 内存限制:256.0MB 查看参考代码 问题描述 在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。 如序列:3,1,2,1,5,1,2。其中 1 就出现 3 次,2 出现 2 次,3 出现 1 次,5 出现 1 次。 你的任务是对于给定的正整数序列,从小到大依次输出序列中出现的数及出现的次数。 输入格式 第一行正整数 n,表示给定序列中正整数的个数。 第二行是 n 个用空格隔开的正整数 x,代表给定的序列。 输出格式 若干行,每行两个用一个空格隔开的数,第一个是数列中出现的数,第二个是该数在序列中出现 的次数。 样例输入 12 8 2 8 2 2 11 1 1 8 1 13 13 样例输出 1 3 2 3 8 3 11 1 13 2
数据规模和约定 数据:n<=1000;0 int main() { int i,m,n,a[1000],count=0,totalcount=0; scanf("%d",&n); for(i=0;i #include #include using namespace std; int main() { int a[1000],i,j=0,b[1000]={0},n,sum=1,x=0; scanf("%d",&n); for(i=0;i
} for(i=0;i int s[200][200];
int ispure(int x1,int y1,int w) //w 为宽度 { int i,j,pure=s[x1][y1]; for(i=0;ic) m=r; else m=c; for(i=0;i #include #include using namespace std; int r,c; int area(int a[200][200],int i,int j,int n) {
分享到:
收藏